2013-10-08 39 views
0

我正在使用PipedInputStream在事物之間發送數據。當連接到PipedInputStream的PipedOutputStream關閉時,似乎無法檢測到PipedInputStream不再能夠讀取數據。目前,我正在使用try { ... } catch(IOException e) { ... }用於檢查InputStream是否已關閉的習語?

是否有一種更習慣的方式來檢測封閉的輸入流,還是所有的Java提供?我查看了API文檔,期望boolean isOpen()等,但找不到。

回答

0

你可以嘗試構建一個觀察者模型風格的系統,當PipedOutputStream關閉時,它發送一個信號,PipedInputStream通過偵聽器接通。所以一方面你會有PipedOutputStream.signalClosing(),另一方面你有onOutputStreamClosing(Event e)函數處理事件(可能通過設置一個布爾,或者只是關閉輸入流)。

0

我會說在其他方向打開溝通渠道。然後,在關閉PipedOutputStream時,您可以使用PipedInputStream向旁邊發送一個字節,並通過關閉雙方的輸出和輸入流來做出反應。否則,你被困在try catch結構中,除了試圖發送數據之外,沒有其他100%的方式說,另一方的流是關閉的。

+0

是的,這將工作。儘管對於我認爲Java流應該包含在內的東西來說,這是很大的開銷。 – apennebaker

+1

我同意你,不幸的是它不:( –