是否有一种跨平台的方式来处理Java中的命名管道,还是应该自己编写?

时间:2009-11-03 11:45:27

标签: java java-native-interface named-pipes

我正在编写一些JNI代码,其中在系统上各种进程的进程空间中运行的DLL需要与java进程对话。在权衡共享的mem / sockets / rpc等之后,我决定使用命名管道(出于各种原因)这样做。我的问题是,有一种很好的方法来处理Java中的命名管道还是应该写一个?

2 个答案:

答案 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");

同样,您可以使用输入流来阅读其他流程对您说的内容。