当前位置: 首页 > 面试题库 >

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

单耘豪
2023-03-14
问题内容

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

  • Java HD5接口(JHI5) HDF组本身的Java包装器。

  • JHDF5(用于Java的HDF5)

  • 多年冻土

  • Nujan:纯Java NetCDF4和HDF5编写器(无法读取HDF5)

最重要的是,我想知道:

  • 涵盖了多少本机API,本机A​​PI中不存在任何限制?

  • 是否支持“ Parallel HDF5”?

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

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


问题答案:

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接口上工作,所以我可能会有所偏见。



 类似资料:
  • 问题内容: 我知道一个API称为一组用于调用某些东西的函数,一个库是一个类的集合,但是像这样的包中的API实际上是什么?我可以在不使用任何API的情况下连接到类似的类,那么为什么我们称其为J2SE API而不是J2SE软件包? 问题答案: 直接来自维基百科: 在计算机科学中,应用程序编程接口(API)是定义应用程序可以从库请求服务的方式的接口 Java在那些软件包中包含许多库(Swing等),而A

  • 问题内容: 和之间有什么区别 例如,当你查看类时,构造函数具有以下签名: 对于方法之一: 问题答案: 第一个说是“是E的祖先的某种类型”。第二个说是“某种类型,它是E的子类”。(在两种情况下,本身都可以。) 因此,构造函数使用该? 形式,以确保在从集合中获取值时,它们将全部为E或某个子类(即,它是兼容的)。该方法试图将值放入集合中,因此集合必须具有 或超类的元素类型。 例如,假设你有一个这样的类层

  • 问题内容: 我需要读取SVHN数据集,并试图读取第一个图像的文件名。 我正在努力了解HDF5的结构,尤其是在了解SVHN数据集的层次结构/结构方面 这两种读取图像名称的方法有什么区别? 我在函数定义中的此脚本中遇到了方法1 :https : //github.com/bdiesel/tensorflow- svhn/blob/master/digit_struct.py 我尝试了hdf5格式文件,

  • 问题内容: 我无法理解以下文本…这是否意味着空的构造函数?为什么拥有两个不同的版本很重要? https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html 在Java虚拟机级别,每个构造函数(第2.12节)都作为具有特殊名称的实例初始化方法出现。该名称由编译器提供。因为该名称不是有效的标识符,所以不能直接用Java编程语言编写的程序中使

  • 问题内容: 在此示例中: 无法编译为: 而被编译器接受。 这个答案说明唯一的区别是,与不同,它允许您稍后引用类型,似乎并非如此。 是什么区别,并在这种情况下,为什么不第一编译? 问题答案: 通过使用以下签名定义方法: 并像这样调用它: 在jls§8.1.2中,我们发现(有趣的部分被我加粗了): 通用类声明定义了一组参数化类型(第4.5节), 每种可能通过类型arguments调用类型参数节的类型

  • 问题内容: Java 和类之间有什么区别? 问题答案: BufferedReader是“ InputStreamReader / FileReader”的包装,它在每次调用本机I / O时都缓冲信息。 您可以想象在读取一个字符(或字节)与读取一个大号时的效率差异。一圈(或字节)中的字符数。使用BufferedReader,如果您希望读取单个字符,它将存储内容以填充其缓冲区(如果为空),并且对于进一