如何从Java打开一个Windows命名pipe道?

在我们的Linux系统上,我们使用命名pipe道进行进程间通信(生产者和消费者)。

为了testing消费者(Java)代码,我想实现(在Java中)虚拟生产者,它写入到连接到消费者的命名pipe道。

现在testing也应该在Windows开发环境中工作。 因此,我想知道如何从Java创build一个Windows命名pipe道。 在Linux中,我可以使用mkfifo(使用Runtime.exec()调用),但是我应该如何在Windows上执行此操作?

使用命名pipe道在Java和.Net进程之间进行通信

链接中的相关部分

 try { // Connect to the pipe RandomAccessFile pipe = new RandomAccessFile("\\\\.\\pipe\\testpipe", "rw"); String echoText = "Hello word\n"; // write to pipe pipe.write ( echoText.getBytes() ); // read response String echoResponse = pipe.readLine(); System.out.println("Response: " + echoResponse ); pipe.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } 

在Windows中, 存在命名pipe道,但不能将其创build为可写入文件系统中的文件,并且没有命令行工具。 他们生活在一个特殊的文件系统,只能使用Win32 API创build。

看起来你不得不求助于本地代码,或者从pipe道切换到IPC的套接字 – 可能是最好的长期解决scheme,因为它更便携。

读取和写入Java中已有的命名pipe道是非常有可能的。 据我所知,你不能在Windows环境中创build一个命名pipe道。 Linux是一个不同的故事,因为命名pipe道可以像文件一样创build和使用。

与现有pipe道交互的相关链接: http : //v01ver-howto.blogspot.com/2010/04/howto-use-named-pipes-to-communicate.html

也许可以使用cygwin命名pipe道 – 如果你所有的进程都是cygwin。