我一直在阅读 Skype4Java(Skype 的 java api)并注意到他们使用 jni 来访问 Skype 客户端。
直观地说,我假设 java 中已经有一个标准库,它具有操作系统敏感的 jni 实现来访问其他进程。我打算找一个,但找不到。
有这样的图书馆吗?如果没有,是否有最佳实践来访问操作系统中的另一个进程,不一定是 Skype 客户端?
我一直在阅读 Skype4Java(Skype 的 java api)并注意到他们使用 jni 来访问 Skype 客户端。
直观地说,我假设 java 中已经有一个标准库,它具有操作系统敏感的 jni 实现来访问其他进程。我打算找一个,但找不到。
有这样的图书馆吗?如果没有,是否有最佳实践来访问操作系统中的另一个进程,不一定是 Skype 客户端?
从 Java 1.4 开始,您可以使用内存映射文件与另一个进程交换任意信息。有关详细信息,请参阅 java.nio.MappedByteBuffer。
这不是您正在寻找的东西,但可能会有所帮助:java.net 上的Java Native Access项目。
别忘了插座...
我认为也许您需要定义“访问”对您意味着什么。如果您谈论的是普通的旧进程间通信,那么套接字或 JNI 确实是您最好的选择。
Garth 关于使用内存映射文件的评论很有趣——我在 C 应用程序之间多次使用 MMF 和虚拟文件进行 IPC,但我从未想过 Java 的 MMF 实现可能与本机 OS 虚拟文件系统兼容。这些类型的虚拟文件通常需要非常重要的设置,所以如果它可以工作我会感到惊讶......
总而言之,除非您在应用程序之间传输大量数据,否则使用套接字可能是最通用和最有效的方法。确保考虑到主机操作系统和 Java VM 之间的字节顺序 :-)