将ud32数据从hdf5文件写入java中的数组的最简单方法是什么?

时间:2016-10-25 10:22:35

标签: java hdf5

我有一个hdf5文件,其中 264x264x1024 表填充了uint32个数字。 我在理解如何从java中获取hdf5文件的数据时遇到问题。 我想将表中的数据写入数组。 有一个简单的方法吗?

可悲的是,我正在处理的系统仍然是java6。

对不起,如果问题不是很具体,如果您需要更多信息来帮助我,请询问。正如我所说,我还不知道很多关于hdf5的事。

谢谢

1 个答案:

答案 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版成功运行。另外,请记住:

  1. Java不支持无符号数据类型,例如uint32(您必须以某种方式自行进行转换);

  2. 如果Java没有足够的堆空间来存储具有这些维度的数组,则可能会遇到OutOfMemoryError异常 (要解决此问题,启动Java时必须使用参数-Xmx)。