2015-11-18 33 views
0

我使用PipedReader的方法ready()来避免输入阻塞,但不幸的是,如果写入程序已离开,此方法不会抛出IOException(与方法read()相反,但这是阻止)。PipedReader.ready()在写入程序已关闭时不会抛出异常

有什么替代方案?有没有一种非封锁的方式来检查作家已经走了?

PS:我想这是在ready()一个漏洞,因为read()返回-1当作家已经走了,但ready()不断返回false

回答

0

这不是ready()中的错误。在javadoc据说ready()将不保证,如果它返回false将不会保证下一个read()将是一个块。所以-1可以通过ready()给出false返回。

仅当管道断裂,未连接或关闭时才会抛出IOException。但我看不到一种方法来确定连接的PipedWriter是否已关闭。也许你可以使用你得到的结果(-1)来识别。 -1也会说流结束。但我看到没有什么不同..

毕竟,你为什么继续使用这些无用的PipedReaders .. ??

+0

你是对的:他们没用,但我有一些遗留的代码来维护... – mljrg