3

我一直在阅读 Skype4Java(Skype 的 java api)并注意到他们使用 jni 来访问 Skype 客户端。

直观地说,我假设 java 中已经有一个标准库,它具有操作系统敏感的 jni 实现来访问其他进程。我打算找一个,但找不到。

有这样的图书馆吗?如果没有,是否有最佳实践来访问操作系统中的另一个进程,不一定是 Skype 客户端?

4

4 回答 4

4

从 Java 1.4 开始,您可以使用内存映射文件与另一个进程交换任意信息。有关详细信息,请参阅 java.nio.MappedByteBuffer。

于 2008-10-02T09:51:00.010 回答
1

这不是您正在寻找的东西,但可能会有所帮助:java.net 上的Java Native Access项目。

于 2008-10-02T09:56:16.033 回答
1

别忘了插座...

于 2008-10-02T10:39:50.813 回答
1

我认为也许您需要定义“访问”对您意味着什么。如果您谈论的是普通的旧进程间通信,那么套接字或 JNI 确实是您最好的选择。

Garth 关于使用内存映射文件的评论很有趣——我在 C 应用程序之间多次使用 MMF 和虚拟文件进行 IPC,但我从未想过 Java 的 MMF 实现可能与本机 OS 虚拟文件系统兼容。这些类型的虚拟文件通常需要非常重要的设置,所以如果它可以工作我会感到惊讶......

总而言之,除非您在应用程序之间传输大量数据,否则使用套接字可能是最通用和最有效的方法。确保考虑到主机操作系统和 Java VM 之间的字节顺序 :-)

于 2008-10-03T03:49:35.610 回答