JNI或Runtime.exec()?

时间:2010-09-20 13:49:52

标签: runtime java-native-interface

我需要调用一个RPC客户端,它是用Java类在C中实现的。

交互只是一种方式(即)Java必须在C中调用特定的函数,而C不需要向调用的Java代码返回任何内容。

有人能解释我的优点吗?在使用任何一种类型(JNI / Runtime.exec)??哪个是我个案的最佳选择?

1 个答案:

答案 0 :(得分:1)

Runtime.exec()将为每个调用启动一个单独的进程。您的Java调用者需要使用每个进程的输出。

JNI需要一个原生的,动态链接的库。根据您的操作系统,您可能需要显式导出功能。您可以使用“native”方法定义Java类,使用javah生成C头/存根文件,并通过调用C客户端函数来实现本机方法。

Runtime.exec()可能占用了大部分资源。我个人会使用对本机代码的进程内调用。

考虑使用 JNA 而不是JNI,这样可以轻松地从Java调用C函数而无需使用特殊的本机粘合层。您的C函数需要位于本机的动态链接库中。在Java中,您声明其签名,加载库并调用函数。

对于Windows DLL,请注意您需要导出函数,以便从DLL外部使用它们。