JNI / JNA vs Runtime.getRuntime()。exec(String)?

时间:2013-12-10 16:06:26

标签: java shell java-native-interface runtime jna

据我所知,我可以在命令shell中执行任何操作,我可以从JNI,JNA或Runtime.getRuntime().exec(String)开始。那么什么时候使用?

JNI / JNA是否允许我与正在运行的本机应用程序进行通信(进程间通信等),否则无法从命令shell执行?或者只是Runtime.getRuntime().exec(String)与平台无关,而JNI / JNA要求您知道您的平台才能使用它们?

1 个答案:

答案 0 :(得分:2)

简而言之,

  • JNI和JNA允许在同一进程中使用本机
  • Runtime.exec(以及它的新朋友ProcessBuilder)推出新的外部应用程序。

由于每个都需要与主机操作系统和现有的本机二进制文件(无论是库还是可运行的程序)合作,因此它们都不是平台独立的。

三者都不允许与正在运行的外部应用程序进行通信。要做到这一点,您需要一个inter-process communication机制,例如,可以在共享内存,文件,管道或套接字之上实现。