Java中的HDF5:可用的API之间有什么区别?

2022-09-01 10:57:03

我刚刚发现了HDF5格式,我正在考虑使用它来存储分布在Java应用程序服务器集群上的3D数据。我发现有几种可用于Java的实现,并想知道它们之间的区别:

最重要的是,我想知道:

  • 覆盖了多少本机 API,以及本机 API 中不存在的任何限制?

  • 是否支持“并行 HDF5”?

  • 加载 3D 数据后,每次访问 3D 数组中的一个元素时,是否都会获得“本机调用开销”?也就是说,数据是否真的被转换为Java对象,或者留在“本机/JNI内存”中?

  • 对于特定的实现,是否有任何已知的稳定性问题,因为本机代码中的崩溃通常会使整个JVM关闭?


答案 1

HDF Java遵循分层方法:

  • JHI5 - 低级JNI包装器:非常灵活,但使用起来也相当乏味。

  • Java HDF对象包 - 基于JHI5的高级接口。

  • HDFView - 基于Java HDF对象包的基于Java的查看器应用程序。

JHDF5提供了一个在JHI5层上构建的高级接口,该接口为Java提供了HDF5的大部分功能。该 API 具有较浅的学习曲线,并且对开发人员隐藏了大部分管理工作。您可以在作为 JHDF5 一部分的 JHI5 接口上运行 Java HDF 对象包(和 HDFView),因此这两个 API 可以在一个 Java 程序中共存。

Permafrost和Nujan在这一点上似乎远未完成,Permafrost最近没有看到很多活动,所以它们似乎不是目前的首选。

我认为对你来说,一个好的方法是看看Java HDF5对象包和JHDF5,决定两个API中的哪一个更适合你的需求,然后使用那个。

免责声明:我曾在JHDF5界面上工作过,所以我可能有偏见。


答案 2

只是想指出另一个选项,jhdf.io 它是HDF5的纯Java库。目前它是只读的,不涵盖完整的HDF5规范。但是它可以打开和读取许多HDF5文件,我希望随着时间的推移对其进行改进。作为纯Java,与其他选项相比,集成到其他Java项目中要容易得多,并且避免了与JNI相关的问题。

免责声明:我是图书馆的作者。jhdf


推荐