在 Java 流中读取 HDF5
Posted
技术标签:
【中文标题】在 Java 流中读取 HDF5【英文标题】:Read HDF5 in streaming in java 【发布时间】:2020-03-21 01:11:07 【问题描述】:我想读取几 GB 的 HDF5 流。为了可移植性,我还想留在本机 java 中。
我尝试过 Java HDF 对象包和 Java HDF5 接口 (JHI5),但这些是一些 JNI 解决方案(如果我找不到更好的选择,我可能会重新考虑)。
https://github.com/jamesmudd/jhdf 是原生 java 库,但不支持切片或流式传输,因此不适用于大文件。
在原生 Java 中有更多选择吗?
编辑:我发现了这个:https://www.unidata.ucar.edu/software/netcdf-java/current/ 它支持切片但不支持流式传输。
【问题讨论】:
这里的问题并不要求具体的解决方案,而是要求软件/库推荐。请重新发布到softwarerecs.stackexchange.com 【参考方案1】:作为jhdf
的作者,我想我会添加我的答案。我不知道有任何其他纯 Java 库试图读取 HDF5。这是我开始写一个的主要原因。尽管jhdf
目前不支持切片或流式传输,但我当然希望将来添加它,但这可能还有一段时间。话虽如此,如果有足够的堆空间,几个千兆字节的文件应该没问题,所以可能仍然值得一试。您可能需要一个大约两倍于您要打开的数据集大小的 xml。我已经使用jhdf
成功打开了几个千兆字节的数据集。
【讨论】:
从我的测试中,我需要至少 3 倍于 Xmx 的数据集大小(我根本没有)。我的场景中 jhdf 的另一个限制是读取文件或字节数组的唯一可能性。由于我有一个流而不是文件,因此我受到最大数组大小的限制,并且必须在打开文件之前将其写入磁盘。由于我无法提供任何流媒体支持,因此我编写了一个客户端,将 HDF5 转换为自定义格式(使用 netcdf-java,因为它具有切片功能),我可以轻松地在流媒体中读取(并通过网络使用压缩以及原始 hdf5 gzip)。以上是关于在 Java 流中读取 HDF5的主要内容,如果未能解决你的问题,请参考以下文章