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

时间:2012-02-10 11:31:15

标签: java hdf5

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

最重要的是,我想知道:

  • 涵盖了多少本机API,没有任何限制 存在于原生API中?

  • 如果支持“Parallel HDF5”?

  • 加载3D数据后,我是否会收到“原生呼叫开销” 每次我访问3D数组中的一个元素?也就是说,做数据 实际上变成了Java对象,或者保留在“native / JNI”中 存储器“?

  • 是否有任何特定的稳定性问题 实现,因为本机代码崩溃通常需要整体 JVM关闭?

2 个答案:

答案 0 :(得分:22)

HDF Java遵循分层方法:

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

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

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

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

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

我认为一个好的途径是查看Java HDF5对象包和JHDF5,确定哪两个API更适合您的需求并与之相配。

免责声明:我参与过JHDF5接口,所以我可能会有偏见。

答案 1 :(得分:1)

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

免责声明:我是 def __init__(self,theFile): self.k = open(theFile,'wb') self.a = csv.writer(self.k) 库的作者。