Java Native Interface的真实应用是什么?

时间:2018-05-19 07:00:58

标签: java java-native-interface

我已经使用JNI成功执行了一个简单的程序,我知道JNI是什么但是我想知道它在哪里被实时使用以及为什么我们需要JNI而我们可以在java中做任何事情。

4 个答案:

答案 0 :(得分:5)

  

...虽然我们可以在java中做任何事情

这是你思考的缺陷。有一些你不能用Java做的事情。还有其他一些你无法用Java实现高效的东西。

示例包括:

  • 以Java API不支持的方式与OS功能交互,
  • 调用用其他编程语言实现的库,
  • 与内存映射设备交互。

答案 1 :(得分:1)

JNI的一个重要应用是包装现有的库;替代方案是移植大型项目(与编写新代码和测试相关的成本)。

参见示例QuantLib,https://www.quantlib.org。他们使用SWIG将整个库移植到Java,而SWIG又使用JNI。

答案 2 :(得分:1)

我将在这里添加一个真实用例。我们的软件应用程序连接到不同的供应商以从中获取数据。为此,我们使用供应商提供的api' s。我们的2个供应商只有C / C ++ API,而且由于我们的应用程序是Java,我们使用JNI与这些API进行通信。

尽管JNI使用起来非常脆弱,但如果它不存在则意味着我们必须用C ++重写部分应用程序,这将是成千上万行代码+维护代码库的维护成本2不同的语言。

在我们的情况下避免JNI的一种可能方法是使用可用于Java和C ++进程之间通信的消息传递中间件,但随后我们会遇到延迟问题+配置和维护另一个复杂的软件来处理用。

答案 3 :(得分:1)

虽然我最近没有使用 JNI,但大约在 6 或 7 年前,我正在开发一个 Java 应用程序,我们在其中实现了密码学。我在 C 中实现了一些加密算法以提高它们的性能并使用 JNI 作为包装器。