我有一个hdf5文件,其中 264x264x1024 表填充了uint32
个数字。
我在理解如何从java中获取hdf5文件的数据时遇到问题。
我想将表中的数据写入数组。
有一个简单的方法吗?
可悲的是,我正在处理的系统仍然是java6。
对不起,如果问题不是很具体,如果您需要更多信息来帮助我,请询问。正如我所说,我还不知道很多关于hdf5的事。
谢谢
答案 0 :(得分:1)
解决这个问题的最简单方法之一就是从Java中的HDF5文件的低级细节中抽象出来。你可以这样做 通过使用HDFql(分层数据格式查询语言 - http://www.hdfql.com)。
假设您的HDF5文件名为my_file.h5
并且它存储了名为my_dataset
的数据集(uint32的维度为264x264x1024),
可以使用HDFql将其读入Java数组,如下所示:
// import HDFql package (make sure it can be found by the Java compiler/JVM)
import as.hdfql.*;
public class Example
{
public static void main(String args[])
{
int data[][][] = new int[264][264][1024];
int x;
int y;
int z;
// use (i.e. open) an HDF5 file named "my_file.h5"
HDFql.execute("USE FILE my_file.h5");
// register variable "data" for subsequent use (by HDFql)
HDFql.variableRegister(data);
// select (i.e. read) a dataset name "my_dataset" and store it in variable "data"
HDFql.execute("SELECT FROM my_dataset INTO MEMORY " + HDFql.variableGetNumber(data));
// display content of variable "data"
for(x = 0; x < 264; x++)
{
for(y = 0; y < 264; y++)
{
for(z = 0; z < 1024; z++)
{
System.out.println(data[x][y][z]);
}
}
}
// unregister variable "data" as it is no longer used/needed (by HDFql)
HDFql.variableUnregister(data);
}
}
此示例使用Java 8和HDFql 1.4.0版成功运行。另外,请记住:
Java不支持无符号数据类型,例如uint32
(您必须以某种方式自行进行转换);
如果Java没有足够的堆空间来存储具有这些维度的数组,则可能会遇到OutOfMemoryError
异常
(要解决此问题,启动Java时必须使用参数-Xmx
)。