【发布时间】:2015-03-23 16:19:43
【问题描述】:
我想用两种不同的语言 java 和 c++ 编写一个程序,它需要在其 c++ 组件和 java 组件之间进行动态和交互式通信。我知道有 jni 和 jna 用于在 java 中调用本机方法,但我不这么认为方法适合我的目的。
例如:假设一个程序,它的用户界面是用 c++ 和其他用 java 编写的,我认为这两个组件的通信不能通过 jni 和 jna 来完成。例如 Open Office 是用 java 和 c++ 编写的。 我搜索了互联网并找到了一些进程间通信的方法 像共享内存,管道,信号,消息传递,......但我不知道进程间通信是我需要的。似乎 ipc 用于在两个不同的进程中通信软件,但我的程序都是一个进程(对吗?!)
所以我的问题是:其组件用不同语言编写的程序如何相互通信?以及我怎样才能做到这一点?
【问题讨论】:
-
您可以使用套接字,但您必须对数据进行反序列化/序列化。我见过人们使用临时文件作为在程序之间传递数据的缓冲区。我没有这方面的经验,但这只是一个建议。这是msdn上关于交流的链接msdn.microsoft.com/en-us/library/aa365574%28v=vs.85%29.aspx
-
我需要非常低的延迟,所以套接字不好。
-
“我知道有 jni 和 jna”...“但我认为这种方法不适合我的目的。”你为什么这么认为? JNI 似乎正是您正在寻找的。 “我不认为这两个组件的通信可以通过 jni 和 jna 来完成”再次,你为什么这么认为?
-
只是想知道:您认为如何在同一个进程中运行一些二进制文件……和一个 Java JVM?含义:当然有两个进程,当然需要进程间通信。
-
@mehrdad 您可以使用共享内存,但在 java 中这样做可能很困难,因此您可能不得不使用 jni 或 jna。
标签: java c++ interop language-interoperability