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