package com.se.simu.service.Impl; import com.se.simu.service.IBizH5FileParserService; import hdf.hdf5lib.H5; import hdf.hdf5lib.HDF5Constants; import hdf.hdf5lib.exceptions.HDF5Exception; import hdf.hdf5lib.exceptions.HDF5LibraryException; import org.springframework.stereotype.Service; import java.util.HashMap; import java.util.Map; @Service public class BizH5FileParserServiceImpl implements IBizH5FileParserService { @Override public long openH5File(String filePath) { int hdf5File = -1; try { hdf5File = H5.H5Fopen(filePath, HDF5Constants.H5F_ACC_RDWR, HDF5Constants.H5P_DEFAULT); // 在这里进行文件操作 } catch (Exception e) { e.printStackTrace(); } finally { if (hdf5File >= 0) { try { H5.H5Fclose(hdf5File); } catch (Exception e) { e.printStackTrace(); } } } return hdf5File; } @Override public Object readDataset(long fileId, String datasetName) { // long datasetId = H5.H5Dopen((int) fileId, datasetName, HDF5Constants.H5P_DEFAULT); // long datatypeId = H5.H5Dget_type((int) datasetId); int[] data = new int[1]; // 假设数据集为整型数组 // H5.H5Dread((int) datasetId, datatypeId, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL, HDF5Constants.H5P_DEFAULT, data); // // H5.H5Dclose(datasetId); // H5.H5Tclose(datatypeId); return data[0]; } @Override public void closeH5File(long fileId) throws HDF5LibraryException { H5.H5Fclose((int) fileId); } @Override public Object parseH5File(String filePath) { String fileName = "D:\\xingjs\\A_daily\\PycharmProjects\\pythonProject\\dev\\example.h5"; String datasetName = "dataset2"; try { // 打开.h5文件 int fileId = H5.H5Fopen(fileName, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT); // 打开数据集 int datasetId = H5.H5Dopen(fileId, datasetName, HDF5Constants.H5P_DEFAULT); // 获取数据集的数据类型 int datatypeId = H5.H5Dget_type(datasetId); int datatypeSize = H5.H5Tget_size(datatypeId); // 获取数据集的数据空间 int dataspaceId = H5.H5Dget_space(datasetId); long[] dims = new long[HDF5Constants.H5S_MAX_RANK]; H5.H5Sget_simple_extent_dims(dataspaceId, dims, null); // 读取数据集的数据 byte[] data = new byte[(int) (dims[0] * datatypeSize)]; H5.H5Dread(datasetId, datatypeId, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL, HDF5Constants.H5P_DEFAULT, data); // 关闭数据集 H5.H5Dclose(datasetId); // 关闭文件 H5.H5Fclose(fileId); // 处理数据 // ... // 打印数据示例 for (int i = 0; i < data.length; i++) { System.out.print(data[i] + " "); } } catch (HDF5Exception e) { e.printStackTrace(); } return null; } }