使用Java流式读取HDF5

6
我想读取几个G的HDF5流数据,并且希望采用本地Java编写以保证可移植性。我尝试过Java HDF对象包和Java HDF5接口(JHI5),但这些都是JNI解决方案(如果找不到更好的选择,我可能会重新考虑)。https://github.com/jamesmudd/jhdf是一个原生的Java库,但它不支持分片或流式传输,因此不能用于大型文件。有没有更多原生Java的选项?编辑:我发现了这个:https://www.unidata.ucar.edu/software/netcdf-java/current/它支持分片但不支持流式传输。

1
这些问题并不要求具体的解决方案,而是要求软件/库的建议。请在http://softwarerecs.stackexchange.com重新发布它。 - hc_dev
1个回答

4
作为jhdf的作者,我想补充一下我的答案。据我所知,没有其他纯Java库试图读取HDF5。这是我开始编写它的主要原因。尽管jhdf目前不支持切片或流式处理,但我肯定会在未来加入它,但那可能还需要一段时间。话虽如此,只要拥有足够的堆空间,几个千兆字节的文件应该没有问题,所以值得一试。您可能需要将xmx设置为要打开的数据集大小的两倍左右。我已经成功地使用jhdf打开了几个千兆字节的数据集。

1
根据我的测试结果,我需要将数据集大小的至少3倍设置为Xmx(但我根本没有这个)。对于我的情况,jhdf的另一个限制是只能读取文件或字节数组。由于我拥有的是流而不是文件,所以我受到最大数组大小的限制,并且必须在打开它之前将文件写入磁盘。由于我无法进行任何流支持,因此我编写了一个客户端,将HDF5转换为自定义格式(使用netcdf-java,因为它具有切片功能),我可以轻松地进行流式读取(并使用gzip通过网络传输压缩和原始hdf5)。 - bloub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接