Java和C应用程序之间的IPC

我有2个应用程序,一个用C语言编写,另一个用Java编写,它们假设在同一台机器上运行。 在它们之间实施IPC的最佳方法是什么?

最佳意义的可移植性,最小的用户意识(防火墙弹出窗口……)等。

我会使用套接字循环回来开始。 这允许您发送文本或二进制数据,并在一个进程启动或死亡时干净地处理。 延迟大约为20-50微秒,具体取决于您对数据的处理以及发送的数量。

套接字是独立于平台的,可以在纯Java中使用。 Java有数百万个示例和教程可供使用。

我发现最简单的方法是从java执行本机程序,然后通过进程输入和输出流进行通信。 这仅适用于ASCII通信,在大多数情况下这很好。 这种方法适用于各种平台。 如果应用程序是相互独立启动的,那么文件或套接字都是跨平台的方法,如果需要,它们将与二进制数据一起使用。

总有JNI或JNA,但这些通常最适合java和本机代码之间的紧密联系。

我从来没有尝试过,但Java确实支持内存映射文件http://docs.oracle.com/javase/1.4.2/docs/api/java/nio/MappedByteBuffer.html这将使您能够共享对象C和Java应用程序之间。 同步访问可能具有挑战性,因为我不认为Java可以直接访问操作系统级别的IPC同步原语。