据我所知,我可以在命令 shell 中执行的任何操作,都可以通过 JNI、JNA 或 Runtime.getRuntime().exec(String) 执行。那么什么时候使用哪个?
JNI/JNA 是否允许我与正在运行的 native 应用程序进行通信(进程间通信等),否则无法从命令 shell 执行该应用程序?或者只是 Runtime.getRuntime().exec(String) 是平台无关的,而 JNI/JNA 要求您知道您所在的平台才能使用它们?
最佳答案
简而言之,
- JNI 和 JNA 允许在同一进程中使用 native 库。
Runtime.exec
(及其新 friendProcessBuilder
)启动新的外部应用程序。
由于每个都需要与主机操作系统和现有的 native 二进制文件(无论是库还是可运行的程序)合作,所以它们都不是平台无关的。
这三个都不允许与正在运行的外部应用程序进行通信。为此,您需要 inter-process communication机制,例如可以在共享内存、文件、管道或套接字之上实现。
关于java - JNI/JNA 与 Runtime.getRuntime().exec(String)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20499326/