将hdf5文件中的uint32数据写入java中的数组的最简单方法是啥?

Posted

技术标签:

【中文标题】将hdf5文件中的uint32数据写入java中的数组的最简单方法是啥?【英文标题】:What is the easiest way to write uint32 data from a hdf5 file to an array in java?将hdf5文件中的uint32数据写入java中的数组的最简单方法是什么? 【发布时间】:2017-03-07 08:26:49 【问题描述】:

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

遗憾的是,我正在使用的系统仍然是 java6。

对不起,如果问题不是很具体,如果您需要更多信息来帮助我,请询问。正如我所说,我对 hdf5 还不太了解。

谢谢

【问题讨论】:

见here。程序员的第一直觉是寻找现有的库。请考虑尝试一个(例如 JHDF5),然后只询问您是否偶然发现了更具体的问题。 【参考方案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;

        // select (i.e. read) a dataset name "my_dataset" from HDF5 file "my_file.h5" and store it in variable "data"
        HDFql.execute("SELECT FROM my_file.h5 my_dataset INTO MEMORY " + HDFql.variableTransientRegister(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]);
                
            
        
    

本示例使用 Java 8 和 HDFql 2.1.0 版成功运行。此外,请记住:

    Java 不支持uint32 等无符号数据类型(您必须自己进行转换);

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

【讨论】:

谢谢!这帮助很大:)

以上是关于将hdf5文件中的uint32数据写入java中的数组的最简单方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

将浮点数组写入和附加到 C++ 中 hdf5 文件中的唯一数据集

HDF5没有将所有数据写入文件

如何将 Pandas 数据框写入 HDF5 数据集

在 fortran 中将写入附加到 hdf5 文件

在 R 中读取大型 HDF5 文件

将uint32 从little endian转换为char数组(写入文件)