【发布时间】:2013-12-03 13:27:59
【问题描述】:
我有一个第三方程序,可以将数据放入名为管道的窗口中。
我通过
访问管道String pipename = "\\\\.\\pipe\\the_pipe";
RandomAccessFile pipe = new RandomAccessFile(pipename, "r");
DataInputStream input = new DataInputStream(Channels.newInputStream(pipe.getChannel()));
因此,有时有人会在我的小型数据转换工具(当然会关闭管道)之前关闭第三方程序。发生这种情况时,我的工具会将收到的最后一百万次消息写入结果文件,并在数小时内成功将每个硬盘填充到最后一个字节,因为我无法检查管道是否已关闭。
我尝试过的事情:
// checking file descriptor and file channel
if(!(pipe.getFD().valid() && pipe.getChannel().isOpen())) {
// quit
}
但这两个选项都不会触发。
是否有其他方法可以访问可以获取此类信息的命名管道? 还是我忽略了什么?
【问题讨论】:
-
isOpen()只告诉你是否还没有结束你的结局。isValid()只告诉你 FD 是否仍然有效,直到你关闭为止。 -
啊,也感谢您指出这一点!最后我真的忽略了异常处理,所以这是我这边的一个错误——不缺乏知识。 ;)
标签: java windows named-pipes