2

我们的主程序是用 java 编写的,但从存储中提取数据的代码是用 C 编写的。我需要从提取的数据中构建一个 HDF5 文件。使用JNI调用C代码获取数据然后从Java构建HDF5文件还是从C代码构建HDF5更好?

我对 JNI 或 C 的经验很少。

此外,我们的主要标准之一是性能。使用 JNI 对性能有多大影响?

4

3 回答 3

6

函数调用边界是“慢”的,因此如果您对本机例程进行多次调用,那么性能会受到影响。

可以从迁移到 JNI 中受益的示例(我强调可能,因为 Java 对于许多目的来说已经足够快了)将是在大型位图上进行某种图像处理的例程。但是为每个像素调用一个 JNI 例程会比在纯 Java 中的循环中执行它要慢得多。

坦率地说,将数据从一种格式提取到另一种格式是最好用 Python 等“脚本”语言完成的事情,并且永远不会受到 CPU 的约束。相反,磁盘速度将比任何语言解释器都慢。

于 2009-10-13T18:56:05.370 回答
1

在我看来,由于您对 C 的经验很少,因此您最好的选择是从 Java 中完成。JNI 确实没那么糟糕。

于 2009-10-13T18:42:21.980 回答
0

我对C以外的HDF接口一点都不熟悉,所以我无法真正为你比较。

我要指出的是,这是所有其他接口都使用的 API,因此,如果您发现需要获得最大性能,那么 C API 将是最好的。

还有一个关于 API 的哪些部分可供您使用的问题。例如,我最初是从 C++ 接口开始的。一些 API 仍然只在 C API 中可用。当您使用 C 和 C++ 时,这不是问题,但如果您需要的 API 不可用,则可能会出现问题。

话虽如此,您确实需要根据 C 的对象模型来搞清楚:例如。指针、句柄等的使用。

于 2009-10-20T10:07:23.790 回答