xingjinshuang
2025-02-20 0890b7861feae74bdcfd1851e577db6b9f31d484
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
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;
    }
 
 
}