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

2022-09-01 14:16:01

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

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

现在,该测试也应该在 Windows 开发环境中工作。因此,我想知道如何从Java在Windows中创建命名管道。在Linux中,我可以使用mkfifo(称为use),但是我应该如何在Windows上执行此操作?Runtime.exec()


答案 1

使用命名管道在 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();
}

答案 2

在窗口中,存在命名管道,但不能将它们创建为可写文件系统中的文件,并且没有命令行工具。它们位于特殊的文件系统中,只能使用 Win32 API 创建。

看起来你必须求助于原生代码,或者从管道切换到IPC的套接字 - 可能是最好的长期解决方案,因为它更具可移植性。


推荐