使用Java从命名管道连续读取
我正在尝试使用java连续读取命名管道。为python/bash解答这个问题使用Java从命名管道连续读取,java,named-pipes,Java,Named Pipes,我正在尝试使用java连续读取命名管道。为python/bash解答这个问题 public class PipeProducer { private BufferedReader pipeReader; public PipeProducer(String namedPipe) throws IOException { this.pipeReader = new BufferedReader(new FileReader(new File(namedPipe))); } p
public class PipeProducer {
private BufferedReader pipeReader;
public PipeProducer(String namedPipe) throws IOException {
this.pipeReader = new BufferedReader(new FileReader(new File(namedPipe)));
}
public void process() {
while ((msg = this.pipeReader.readLine()) != null) {
//Process
}
}
public static void main(String args[]) throws JSONException,IOException {
PipeProducer p = new PipeProducer("/tmp/testpipe");
while(true) {
p.process();
System.out.println("Encountered EOF");
now = new Date();
System.out.println("End : " + now);
}
}
问题
EOF
时,是否可以重用Reader
对象EOF
是否仅在管道终止时由管道发送,否则不发送李>
读取器一样
遇到EOF时是否可以重用读卡器对象
我不会指望的。在这种情况下,关闭读取器
并创建一个新读取器会更安全
EOF是否仅在终止时通过管道发送,而不是通过其他方式发送
在Unix上,当管道从一个写入程序变为零,再也没有可用数据时,将从管道接收EOF。我不确定Windows命名管道语义是否在这方面有所不同,但由于您使用的是Linux,这对您来说并不重要
除非真的出了问题,否则管道能保证正常工作吗
如果文件系统上确实存在命名管道,并且您有足够的权限,那么您应该能够可靠地打开它进行读取,但这可能会阻止,直到至少有一个写入程序。除此之外,我不知道你的意思
如果管道在一段时间内没有数据,会发生什么情况
程序阻塞直到有数据要读取或检测到EOF,就像连接到任何其他类型文件的读取器一样
遇到EOF时是否可以重用读卡器对象
我不会指望的。在这种情况下,关闭读取器
并创建一个新读取器会更安全
EOF是否仅在终止时通过管道发送,而不是通过其他方式发送
在Unix上,当管道从一个写入程序变为零,再也没有可用数据时,将从管道接收EOF。我不确定Windows命名管道语义是否在这方面有所不同,但由于您使用的是Linux,这对您来说并不重要
除非真的出了问题,否则管道能保证正常工作吗
如果文件系统上确实存在命名管道,并且您有足够的权限,那么您应该能够可靠地打开它进行读取,但这可能会阻止,直到至少有一个写入程序。除此之外,我不知道你的意思
如果管道在一段时间内没有数据,会发生什么情况
没什么。它会阻塞
遇到EOF时是否可以重用读卡器对象
重复使用是为了什么?它已经到了数据的末尾。这个问题没有出现
EOF是否仅在终止时通过管道发送,而不是通过其他方式发送
当对等方关闭其管道末端时发送
除非真的出了问题,否则管道能保证正常工作吗
无论是在管道中还是在生活中,都不能保证任何东西,但在没有错误的情况下,您应该继续读取发送的任何数据
如果管道在一段时间内没有数据,会发生什么情况
没什么。它会阻塞
遇到EOF时是否可以重用读卡器对象
重复使用是为了什么?它已经到了数据的末尾。这个问题没有出现
EOF是否仅在终止时通过管道发送,而不是通过其他方式发送
当对等方关闭其管道末端时发送
除非真的出了问题,否则管道能保证正常工作吗
无论是在管道中还是在生活中,都不能保证任何东西,但如果没有错误,您应该继续读取发送的任何数据。事实上,我能够连接这些点。但我唯一担心的是错过了一些事件。大约有多个写入程序150次写入,只有一个管道。我假设管道缓冲区为65536字节。发送数据时读卡器正在运行。但是我没有得到所有的数据,事实上我能够把这些点连接起来。但我唯一担心的是错过了一些事件。大约有多个写入程序150次写入,只有一个管道。我假设管道缓冲区为65536字节。发送数据时读卡器正在运行。但我没有得到所有的数据。