我正在使用ready()
的{{1}}方法来避免阻塞输入,但不幸的是,如果编写器已经离开,则此方法不会抛出IOException(与方法PipedReader
相反,但是这个是阻止的。)
有哪些替代方案?是否有一种非阻塞方式来检查作者是否已经离开?
PS:我认为这是read()
中的错误,因为当作者离开时ready()
返回-1,但read()
不断返回ready()
。
答案 0 :(得分:0)
这不是ready()
中的错误。在javadoc
中,如果ready()
返回read()
,false
将无法保证下一个ready()
将成为一个块。因此,虽然false
给IOException
,但可以返回-1。
仅在管道损坏,未连接或关闭时才会抛出PipedWriter
。但是,我无法确定是否已关闭连接的PipedReaders
。也许你可以使用你得到的结果(-1)来识别。 -1也会说流结束。但我认为没有什么不同......
毕竟,为什么要继续使用这些无用的{{1}} .. ??