我刚刚发现了HDF5格式,我正在考虑使用它来存储分布在Java应用服务器集群上的3D数据。我发现有几种可用于Java的实现,并且想知道它们之间的差异:
Java HD5 Interface (JHI5)来自HDF组的Java包装器。
Nujan: Pure Java NetCDF4 and HDF5 writer(无法读取HDF5)
最重要的是,我想知道:
涵盖了多少本机API,没有任何限制 存在于原生API中?
如果支持“Parallel HDF5”?
加载3D数据后,我是否会收到“原生呼叫开销” 每次我访问3D数组中的一个元素?也就是说,做数据 实际上变成了Java对象,或者保留在“native / JNI”中 存储器“?
是否有任何特定的稳定性问题 实现,因为本机代码崩溃通常需要整体 JVM关闭?
答案 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)
库的作者。