我正在编写一些JNI代码,其中在系统上各种进程的进程空间中运行的DLL需要与java进程对话。在权衡共享的mem / sockets / rpc等之后,我决定使用命名管道(出于各种原因)这样做。我的问题是,有一种很好的方法来处理Java中的命名管道还是应该写一个?
答案 0 :(得分:1)
假设你在Unix上运行,你不能用exec创建管道然后用File * Stream读写吗?
@Test public void pipe() throws IOException, InterruptedException {
Runtime.getRuntime().exec("mkfifo mypipe");
final String[] read = new String[1];
Thread t = new Thread() {
@Override
public void run() {
try {
BufferedReader r = new BufferedReader(new FileReader("mypipe"));
read[0] = r.readLine();
} catch (IOException e) {
}
}
};
t.start();
FileWriter w = new FileWriter("mypipe");
w.write("hello\n");
w.flush();
t.join();
assertEquals("hello", read[0]);
}
答案 1 :(得分:0)
我以前通过Process输入和输出流进行进程通信: 例如,
Process p = Runtime.getRuntime().exec("myproc");
OutputStream is = p.getOutputStream();
BufferedOutputStream bis = new BufferedOutputStream(is);
bis.write("your_command");
同样,您可以使用输入流来阅读其他流程对您说的内容。