有没有跨平台的方法来处理java中的命名管道,还是我应该自己编写?

pcww981p  于 2021-07-05  发布在  Java
关注(0)|答案(2)|浏览(321)

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

ar5n3qh5

ar5n3qh51#

假设您是在unix上运行的,难道不能用exec创建管道,然后用file*流进行读写吗?

@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]);
}
uqzxnwby

uqzxnwby2#

我曾经通过进程的输入和输出流进行进程通信。

Process p = Runtime.getRuntime().exec("myproc");
OutputStream is = p.getOutputStream();
BufferedOutputStream bis = new BufferedOutputStream(is);
bis.write("your_command");

类似地,您可以使用inputstreams来读取其他进程对您说的话。

相关问题