是否有通过Java访问OS中另一个进程的"最佳实践"?

时间:2020-03-06 15:01:03  来源:igfitidea点击:

我一直在阅读Skype4Java(Skype的Java API),注意到它们使用jni访问skype客户端。

凭直觉,我认为Java中已经有一个标准库,该库具有OS敏感的jni实现,可以访问其他进程。我准备寻找一个,但找不到。

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

解决方案

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

这并不是我们要找的东西,但是可能会很有帮助:java.net上的Java Native Access项目。

不要忘记插座...

我认为也许我们需要定义"访问"对我们意味着什么。如果我们正在谈论普通的老式进程间通信,那么套接字或者JNI确实是最佳选择。

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

所有人都说过,除非我们在应用之间注入大量数据,否则使用套接字可能是最通用,最有效的方式。确保我们考虑了主机操作系统和Java VM之间的字节顺序:-)