Hierarchical Data Format,可以存储不同类型的图像和数码数据的文件格式,并且可以在不同类型的机器上传输,同时还有统一处理这种文件格式的函数库。大多数普通计算机都支持这种文件格式
HDF是用于存储和分发科学数据的一种自我描述、多对象文件格式。HDF是由美国国家超级计算应用中心(NCSA)创建的,以满足不同群体的科学家在不同工程项目领域之需要。

关于HDF5的介绍,请查看HDF5的官方页面。和参考此文:科学存储数据格式-HDF5

此外,HDF5提供了JAVA接口,下面是java使用HDF5的一些注意事项和相关代码。

1.Eclipse配置

到hdf5的安装文件夹下面,把jarhdf5.jar, slf4j-api.jar,slf4j-simple.jar 添加到功能lib目录,同时把hdf5_java.dll文件添加到一个目录X。注意,在此过程中,添加且只添加这三个文件,第四个slf4j-nop-1.7.5.jar暂时不使用。

HDF5为C++ native的第三方库,按照引入库的一般步骤加入Eclipse工程。windows->preference->java->userLIbraries->new。自行添加库的名字。我的名字是HDF5。

然后在新建的用户库里面,Add JARS,添加jarhdf5.jar, slf4j-api.jar,slf4j-simple.jar三个文件,并在jarhdf5.jar下面配置Native library location,链接到X目录,用以调用Native动态库hdf5_java.dll。

然后在工程的源码文件中,引入hdf5的包。

例如:

import hdf.hdf5lib.H5;
import hdf.hdf5lib.HDF5Constants;

2.读取HDF5文件

初次使用,使用了C++写入的文件,测试读取,可运行代码如下:

public static void main(String[] args) {
String fname = "D:/dataSet/RecoSys/JavaTest/HDF5DatasetRead.h5";
// private static
String dsname = e = "training_data";
try {
// create the HDF5 file and add groups and dataset into the file
//save_to_file(fname, dsname, dims2D);
} catch (Exception ex) {
ex.printStackTrace();
} // 测试读出
try {
load_from_file(fname, dsname);
} catch (Exception ex) {
ex.printStackTrace();
}
}

load函数:

	public static int load_from_file(String fname, String dsname) throws Exception {

                //读取先后使用了fileID,SpaceID,DatasetID
long file_id = -1;
long space_id = -1;
long dataset_id = -1; // Open file using the default properties.
try {
file_id = H5.H5Fopen(fname, HDF5Constants.H5F_ACC_RDWR, HDF5Constants.H5P_DEFAULT);
} catch (Exception e) {
e.printStackTrace();
} // Open dataset using the default properties.
try {
if (file_id >= 0)
dataset_id = H5.H5Dopen(file_id, dsname, HDF5Constants.H5P_DEFAULT);
} catch (Exception e) {
e.printStackTrace();
} // Allocate array of pointers to two-dimensional arrays (theelements of the dataset.
int l = 20;
int w =20;
long[] dims = {0,0};
long[] dims2 = {0,0};
//获取
space_id = H5.H5Dget_space(dataset_id);
H5.H5Sget_simple_extent_dims(space_id,dims,dims2);
l= (int)dims[0];
w= (int)dims[1]; int[][] dataRead = new int[l][w];
try {
if (dataset_id >= 0)
H5.H5Dread(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
HDF5Constants.H5P_DEFAULT, dataRead);
} catch (Exception e) {
e.printStackTrace();
} // print out the data values
System.out.println("\n\nOriginal Data Values");
for (int i = 0; i < l; i++) {
System.out.print("\n" + dataRead[i][0]);
for (int j = 1; j < w; j++) {
System.out.print(", " + dataRead[i][j]);
}
}
}

实现把数据读取到dataRead中。

3.保存HDF5文件

..............待完成..................

最新文章

  1. .Net组件程序设计之对象生命周期
  2. LeetCode之283. Move Zeroes
  3. 【bzoj1178】 Apio2009—CONVENTION会议中心
  4. 常用jQuery代码02
  5. Parencodings 分类: POJ 2015-06-28 22:00 7人阅读 评论(0) 收藏
  6. Python的getattr(),setattr(),delattr(),hasattr()
  7. JQuery Mobile实现手机新闻浏览器(2)
  8. 2013年度Python Git工具
  9. 性能优化工具---vmstat
  10. Android 数据库加密
  11. map,set的模板[STL]
  12. Event对象的事件句柄
  13. ORACLE设置用户密码不过期
  14. python模块之时间模块
  15. 小豆包的学习之旅:占用概率栅格地图和cost-map
  16. &lt;转&gt;安全测试思维导图
  17. .Net常用正则判断方法
  18. android 从零单排 第一期 按键显示helloworld
  19. 获取Django中model字段名 字段的verbose_name
  20. .NET基础 (16)事件

热门文章

  1. hdu 3500 DFS(限定)
  2. 【Codeforces 478C】Table Decorations
  3. N天学习一个Linux命令之mkdir
  4. 开源GIS软件 3
  5. 开启IIS的动态gzip功能
  6. 你不知道的JavaScript--Item33 跨域总结与解决的方法
  7. B1041 [HAOI2008]圆上的整点 数学
  8. P2932 [USACO09JAN]地震造成的破坏Earthquake Damage 爆搜
  9. 解析HTML文件
  10. PCB Genesis增加点阵字 实现原理