Как открыть Windows named pipe из Java?
В нашей системе Linux мы используем именованные каналы для межпроцессного обмена (производитель и потребитель).
Чтобы проверить код потребителя (Java), я хотел бы реализовать (на Java) фиктивный продюсер, который записывает именованный канал, который подключен к потребителю.
Теперь тест должен также работать в среде разработки Windows. Таким образом, я хотел бы знать, как создать именованный канал в Windows с Java. В Linux я могу использовать mkfifo (называемый с помощью Runtime.exec()
), но как это сделать в Windows?
Ответы
Ответ 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 - вероятно, лучшее долгосрочное решение, поскольку оно гораздо более портативное.
Ответ 3
Вполне возможно читать и писать на существующий именованный канал в Java. Вы не можете, насколько мне известно, создать именованный канал в среде Windows. Linux - это другая история, поскольку именованные каналы могут быть созданы и использованы как файлы.
Соответствующая ссылка на взаимодействие с существующим каналом: http://v01ver-howto.blogspot.com/2010/04/howto-use-named-pipes-to-communicate.html
Ответ 4
возможно, может использовать именованные каналы cygwin - если все ваши процессы - cygwin.