2015-11-18 59 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

相關問題