[英]How to open a Windows named pipe from Java?
在我們的Linux系統中,我們使用命名管道進行進程間通信(生產者和消費者)。
為了測試使用者(Java)代碼,我想實現(在Java中)一個虛擬生成器,它寫入連接到使用者的命名管道。
現在,測試也應該在Windows開發環境中運行。 因此,我想知道如何在Java中從Windows創建命名管道。 在Linux中,我可以使用mkfifo(使用Runtime.exec()
調用),但是我應該如何在Windows上執行此操作?
鏈接中的相關部分
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中, 存在命名管道,但它們不能在可寫文件系統中創建為文件 ,也沒有命令行工具。 它們位於特殊的文件系統中,只能使用Win32 API創建。
看起來你將不得不求助於本機代碼,或者從管道切換到IPC的套接字 - 可能是最好的長期解決方案,因為它更便攜。
您可以使用JNA庫https://github.com/java-native-access/jna創建命名管道
它在以下測試中清楚地顯示: https : //github.com/java-native-access/jna/blob/master/contrib/platform/test/com/sun/jna/platform/win32/Kernel32NamedPipeTest.java
JNA包裝器的API與Win32相同,因此您將能夠在Windows上使用命名管道的所有功能和強大功能。
可以在Java中讀取和寫入現有的命名管道。 據我所知,您無法在Windows環境中創建命名管道。 Linux是一個不同的故事,因為可以像文件一樣創建和使用命名管道。
與現有管道交互的相關鏈接: http : //v01ver-howto.blogspot.com/2010/04/howto-use-named-pipes-to-communicate.html
也許可以使用cygwin命名管道 - 如果你的所有進程都是cygwin。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.