java - 用Java重写C代码还是使用JNI?

标签 java java-native-interface

我目前正在开发一个用 Java 编写的项目。我们有一堆用 C/C++ 编写的算法(至少有几百个)需要合并到我们的项目中。我们的两个选择是使用 JNI 调用这段代码,或者用 Java 重写所有算法。

我知道使用 JNI 的后果,它会引发一系列全新的问题,这就是为什么甚至考虑用 Java 重写所有代码的原因。但是重写它的想法似乎......错误。据我所知,这些算法已经过测试并且可以正常工作,只是语言错误。

在这种情况下,JNI 会让这项任务变得简单吗?还是会比用 Java 重写代码更让人头疼?


编辑 #1: 相关问题 - Usefulness of JNI


编辑 #2: 仅供引用 - 我们的 Java 项目不打算以任何方式移植。这可能会消除 JNI 的缺点之一,因为它可能会降低可移植性。

最佳答案

简单的答案是,如果代码会被大量调用并且性能很重要,那么将其转换为 Java。

更复杂的答案是:

  • 如果库很容易被 JNI 封装,那么就使用 JNI
  • 如果您对 C/C++ 代码的测试很容易转换为 Java,那么请选择移植版

我会做以下事情:

  • 采用其中一种算法并将其包装在 JNI 中
  • 采用相同的算法并将其转换为 Java
  • 看看哪个更痛苦
  • 如果速度很重要,请分析两个版本,看看哪一个是可以接受的。

关于java - 用Java重写C代码还是使用JNI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/611296/

相关文章:

java - HibernateUtil 在 GlassFish 上工作,但不在 Tomcat 上工作

android - FFmpeg 示例代码,用于从静止图像 JNI Android 创建视频文件

java - 从 jni 访问加速度计

java - JDK9 NetBeans Dev - JNI 教程期间编译错误

java - Cassandra - 使用 Java API 设置写入超时

java - 输入时没有可行的替代方案

java - 在国际象棋编程中很好地使用递归?

java - 在 Java 中向上转型

java - 如何从 Java 替换 cocos2d-x 场景?

java - 能否从 native 代码访问 java 对象,反之亦然?