将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中的数组的最简单方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章