From b9e9825722e4a2e0111434099c24b8373698753d Mon Sep 17 00:00:00 2001 From: xingjinshuang <xingjs@qq.com> Date: 星期二, 10 十二月 2024 16:03:05 +0800 Subject: [PATCH] @xingjs@20241210@添加解析h5文件相关类 --- src/main/java/com/se/simu/service/IBizH5FileParserService.java | 46 +++++++++++ src/main/java/com/se/simu/service/Impl/BizH5FileParserServiceImpl.java | 87 +++++++++++++++++++++ src/main/java/com/se/simu/controller/BizH5FileParserController.java | 71 +++++++++++++++++ src/main/java/com/se/simu/helper/HDF5ReaderHelper.java | 10 ++ 4 files changed, 214 insertions(+), 0 deletions(-) diff --git a/src/main/java/com/se/simu/controller/BizH5FileParserController.java b/src/main/java/com/se/simu/controller/BizH5FileParserController.java new file mode 100644 index 0000000..b1d8bba --- /dev/null +++ b/src/main/java/com/se/simu/controller/BizH5FileParserController.java @@ -0,0 +1,71 @@ +package com.se.simu.controller; + +import com.se.simu.domain.vo.R; +import com.se.simu.service.IBizH5FileParserService; +import hdf.hdf5lib.exceptions.HDF5LibraryException; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +/** + * Bize H5 鏂囦欢瑙f瀽鍣ㄦ帶鍒跺櫒 + * + * @author xingjinshuang@smartearth.cn + * @date 2024/12/06 + */ +@Api(tags = "H5 鏂囦欢瑙f瀽鍣ㄦ帶鍒跺櫒") +@Slf4j +@CrossOrigin(origins = "*", maxAge = 3600) +@RestController +@RequestMapping("/h5") +public class BizH5FileParserController extends BaseController { + + + @Resource + private IBizH5FileParserService bizH5FileParserService; + + /** + * HDF5鏂囦欢 璇存槑 + */ + @ApiOperation("HDF5鏂囦欢 璇存槑") + @GetMapping("/hdf5-illustrate") + public R<Object> hdf5FileIllustrate() throws HDF5LibraryException { + String content = "HDF5锛圚ierarchical Data Format version 5锛夋槸涓�绉嶇敤浜庡瓨鍌ㄥ拰缁勭粐澶ч噺鏁版嵁鐨勬枃浠舵牸寮忥紝瀹冩敮鎸侀珮鏁堝湴瀛樺偍鍜屽鐞嗗ぇ瑙勬ā绉戝鏁版嵁鐨勮兘鍔涖�侶DF5 鏄竴绉嶇伒娲荤殑鏁版嵁妯″瀷锛屽彲浠ュ瓨鍌ㄥ绉嶆暟鎹被鍨嬶紝鍖呮嫭鏁板�兼暟鎹�佸浘鍍忋�佽〃鏍肩瓑绛夛紝骞朵笖鍙互鎸夌収灞傜骇缁撴瀯缁勭粐鏁版嵁銆俓n" + + "HDF5 鏂囦欢锛堥�氬父浣跨敤 .h5 鎵╁睍鍚嶏級鏄竴绉嶄簩杩涘埗鏂囦欢鏍煎紡锛屽畠鍏锋湁浠ヤ笅鐗圭偣锛歕n" + + "1.鐏垫椿鎬э細 HDF5 鏂囦欢鏍煎紡闈炲父鐏垫椿锛屽彲浠ュ瓨鍌ㄥ悇绉嶄笉鍚岀被鍨嬪拰澶у皬鐨勬暟鎹紝浠庣畝鍗曠殑鏁板�兼暟缁勫埌澶嶆潅鐨勫缁存暟鎹泦鍚堛�俓n" + + "2.灞傜骇缁撴瀯锛� HDF5 鏂囦欢鏄互灞傜骇缁撴瀯缁勭粐鐨勶紝鍙互鍦ㄦ枃浠朵腑鍒涘缓澶氫釜鏁版嵁闆嗭紙Datasets锛夊拰缁勶紙Groups锛夛紝鍏佽鐢ㄦ埛鏍规嵁闇�姹傜粍缁囧拰绠$悊鏁版嵁銆俓n" + + "3.澶氱鏁版嵁绫诲瀷锛� HDF5 鏀寔澶氱鏁版嵁绫诲瀷锛屽寘鎷爣閲忋�佹暟缁勩�佸瓧绗︿覆銆佽〃鏍肩瓑绛夛紝骞朵笖鍙互浣跨敤涓嶅悓鐨勫帇缂╂妧鏈鏁版嵁杩涜鍘嬬缉銆俓n" + + "4.楂樻晥鎬ц兘锛� HDF5 鏂囦欢鏍煎紡琚璁$敤浜庨珮鏁堝瓨鍌ㄥ拰澶勭悊澶у瀷鏁版嵁闆嗭紝鍏锋湁楂樻晥鐨勬暟鎹闂拰璇诲啓鎬ц兘銆俓n" + + "5.璺ㄥ钩鍙板吋瀹规�э細 HDF5 鏂囦欢鍙互鍦ㄤ笉鍚岀殑鎿嶄綔绯荤粺涓婁娇鐢紝鍏锋湁鑹ソ鐨勮法骞冲彴鍏煎鎬с�俓n" + + "HDF5 鏂囦欢閫氬父鐢辩瀛﹁绠椼�佹暟鎹垎鏋愩�佹満鍣ㄥ涔犵瓑棰嗗煙鐨勫簲鐢ㄥ箍娉涗娇鐢紝鐢ㄤ簬瀛樺偍澶ц妯℃暟鎹泦锛屼緥濡傚浘鍍忔暟鎹�佷紶鎰熷櫒鏁版嵁銆佹ā鎷熸暟鎹瓑銆傞�氳繃浣跨敤鍚勭缂栫▼璇█鐨� HDF5 搴撳拰宸ュ叿锛屽彲浠ユ柟渚垮湴璇诲啓鍜屽鐞� HDF5 鏍煎紡鐨勬枃浠躲��"; + log.info("HDF5鏂囦欢 璇存槑:{}", content); + return success(content); + } + + /** + * 鎵撳紑HDF5鏂囦欢 + * + * @param filePath 鏂囦欢璺緞 + * @return 鏂囦欢ID + */ + @ApiOperation("鎵撳紑HDF5鏂囦欢") + @PostMapping("/open-hdf5-file") + public R<Object> openHdf5File(String filePath) throws HDF5LibraryException { + return success(bizH5FileParserService.openH5File(filePath)); + } + + /** + * 瑙f瀽HD5鏂囦欢 + */ + @ApiOperation("瑙f瀽HD5鏂囦欢") + @PostMapping("/parse-hdf5-file") + public R<Object> parseHdf5File(String filePath) throws HDF5LibraryException { + filePath = "/Users/zhangshan/Desktop/hdf5/data.h5"; + log.info("瑙f瀽HD5鏂囦欢:{}", filePath); + return success(bizH5FileParserService.parseH5File(filePath)); + } + +} diff --git a/src/main/java/com/se/simu/helper/HDF5ReaderHelper.java b/src/main/java/com/se/simu/helper/HDF5ReaderHelper.java new file mode 100644 index 0000000..f6ed1aa --- /dev/null +++ b/src/main/java/com/se/simu/helper/HDF5ReaderHelper.java @@ -0,0 +1,10 @@ +package com.se.simu.helper; + +public class HDF5ReaderHelper { + public static void main(String[] args) { + + + } + + +} diff --git a/src/main/java/com/se/simu/service/IBizH5FileParserService.java b/src/main/java/com/se/simu/service/IBizH5FileParserService.java new file mode 100644 index 0000000..3b4ae8e --- /dev/null +++ b/src/main/java/com/se/simu/service/IBizH5FileParserService.java @@ -0,0 +1,46 @@ +package com.se.simu.service; + +import hdf.hdf5lib.exceptions.HDF5LibraryException; + +/** + * ibiz H5 鏂囦欢瑙f瀽鍣� + * + * @author xingjinshuang@smartearth.cn + * @date 2024/12/06 + */ +public interface IBizH5FileParserService { + + /** + * 鎵撳紑HDF5鏂囦欢 + * + * @param filePath 鏂囦欢璺緞 + * @return 鏂囦欢ID + */ + long openH5File(String filePath) throws HDF5LibraryException; + + + /** + * 璇诲彇鎸囧畾鏁版嵁闆嗙殑鏁版嵁 + * + * @param fileId 鏂囦欢ID + * @param datasetName 鏁版嵁闆嗗悕绉� + * @return 鏁版嵁闆嗙殑鍊� + */ + Object readDataset(long fileId, String datasetName); + + + /** + * 鍏抽棴HDF5鏂囦欢 + * + * @param fileId 鏂囦欢ID + */ + void closeH5File(long fileId) throws HDF5LibraryException; + + /** + * 瑙f瀽 H5 鏂囦欢 + * + * @param filePath + * @return {@link Object} + */ + Object parseH5File(String filePath); +} diff --git a/src/main/java/com/se/simu/service/Impl/BizH5FileParserServiceImpl.java b/src/main/java/com/se/simu/service/Impl/BizH5FileParserServiceImpl.java new file mode 100644 index 0000000..5cd6f5e --- /dev/null +++ b/src/main/java/com/se/simu/service/Impl/BizH5FileParserServiceImpl.java @@ -0,0 +1,87 @@ +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; + +@Service +public class BizH5FileParserServiceImpl implements IBizH5FileParserService { + + + @Override + public long openH5File(String filePath) throws HDF5LibraryException { + long fileId = H5.H5Fopen(filePath, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT); + return fileId; + } + + @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; + } + + +} -- Gitblit v1.9.3