我目前正在开发一个用 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/