我正在嘗試編寫一段解除阻塞代碼以從PipedInputStream
中讀取。它主要檢查是否有任何調用阻塞前閱讀閱讀API:Java PipedInputStream available()方法返回值
int n = 0;
if ((n = pipedInputStream_.available()) > 0) {
pipedInputStream_.read(...)
}
通過java API doc我不能肯定地告訴該檢查應該是什麼閱讀,因爲可能的值爲零(意味着沒有數據,或關閉/破碎流)或大於零。那麼來電者怎麼知道是否有什麼可讀的東西呢? 「
」返回可以從此輸入流中讀取的無阻塞字節數,或者如果通過調用close()方法關閉了此輸入流,或者管道未連接或斷開,則返回0。 「
查看來源,它似乎是唯一的值是零或大於零。
public synchronized int available() throws IOException {
if(in < 0)
return 0;
else if(in == out)
return buffer.length;
else if (in > out)
return in - out;
else
return in + buffer.length - out;
}
零並不意味着封閉或斷開的流。每個規格僅允許零或大於零。 – EJP
你能澄清爲什麼你說零不暗示關閉或破流?請看看我同意的那個解釋。 Java文檔還指出: 「返回: 可以從此輸入流讀取的無阻塞字節數,如果此輸入流已通過調用close()方法關閉,或者管道是未連接或斷開。「 – USQ
你誤會了。零意味着*要麼*沒有數據要被讀取而沒有阻塞*或*流被關閉*或*管道未連接*或*管道損壞。這並不意味着只有這些條件中的一個。 – EJP