我正在编写一段jni代码,其中运行在系统上各种进程的进程空间中的dll需要与java进程进行对话。在权衡了共享mem/sockets/rpc等之后,我决定使用命名管道来实现这一点(出于各种原因)。我的问题是,在java中有没有处理命名管道的好方法,还是我应该编写一个?
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]); }
uqzxnwby2#
我曾经通过进程的输入和输出流进行进程通信。
Process p = Runtime.getRuntime().exec("myproc"); OutputStream is = p.getOutputStream(); BufferedOutputStream bis = new BufferedOutputStream(is); bis.write("your_command");
类似地,您可以使用inputstreams来读取其他进程对您说的话。
2条答案
按热度按时间ar5n3qh51#
假设您是在unix上运行的,难道不能用exec创建管道,然后用file*流进行读写吗?
uqzxnwby2#
我曾经通过进程的输入和输出流进行进程通信。
类似地,您可以使用inputstreams来读取其他进程对您说的话。