我需要调用一个RPC客户端,它是用Java类在C中实现的。
交互只是一种方式(即)Java必须在C中调用特定的函数,而C不需要向调用的Java代码返回任何内容。
有人能解释我的优点吗?在使用任何一种类型(JNI / Runtime.exec)??哪个是我个案的最佳选择?
答案 0 :(得分:1)
Runtime.exec()将为每个调用启动一个单独的进程。您的Java调用者需要使用每个进程的输出。
JNI需要一个原生的,动态链接的库。根据您的操作系统,您可能需要显式导出功能。您可以使用“native”方法定义Java类,使用javah生成C头/存根文件,并通过调用C客户端函数来实现本机方法。
Runtime.exec()可能占用了大部分资源。我个人会使用对本机代码的进程内调用。
考虑使用 JNA 而不是JNI,这样可以轻松地从Java调用C函数而无需使用特殊的本机粘合层。您的C函数需要位于本机的动态链接库中。在Java中,您声明其签名,加载库并调用函数。
对于Windows DLL,请注意您需要导出函数,以便从DLL外部使用它们。