31

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

最重要的是,我想知道:

  • 覆盖了多少原生 API,原生 API 中不存在的任何限制?

  • 是否支持“Parallel HDF5”?

  • 加载 3D 数据后,每次访问 3D 数组中的一个元素时是否都会获得“本机调用开销”?也就是说,数据实际上是变成了 Java 对象,还是留在“本机/JNI 内存”中?

  • 特定实现是否存在已知的稳定性问题,因为本机代码崩溃通常会使整个 JVM 崩溃?

4

3 回答 3

26

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接口,可能有偏见。

于 2012-02-14T14:23:23.650 回答
6

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

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

于 2019-08-21T20:14:43.650 回答
0

另一个用 Java 处理 HDF5 文件的 API 是HDFql。它的主要特征之一是声明性的。这使得处理 HDF5 文件(非常)更容易,因为您只需告诉 HDFql做什么,而不是在使用上述 API 之一时告诉如何去做(所有这些 API 都是必要的)。

于 2022-01-10T11:52:58.467 回答