我正在编写一些 JNI 代码,其中运行在系统上各个进程的进程空间中的 DLL 需要与 java 进程进行对话。在权衡共享内存/套接字/rpc 等之后,我决定使用命名管道来执行此操作(出于各种原因)。我的问题是,是否有一种在 Java 中处理命名管道的好方法,或者我应该编写一个? p>
最佳答案
假设您在 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]);
}
关于java - Java 中有处理命名管道的跨平台方法还是我应该编写自己的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1666815/