2011-09-23 82 views
2

什麼是InputStreamavailable()方法是否應該在流到達結束時返回?java輸入流

該文檔沒有指定行爲。

+1

那麼,文檔確實說這個方法應該被子類重寫,所以行爲依賴於實現,並且可能對不同類型的流有所不同。 – pablochan

回答

1

,JavaDoc會不會告訴你在返回段 -

an estimate of the number of bytes that can be read (or skipped over) from this input stream without blocking or 0 when it reaches the end of the input stream. 

(從InputStream JavaDoc

+0

我的不好。它不會阻止非阻塞IO使用嗎? – fulmicoton

1

從理論上講,如果到達流的末尾,沒有要讀取的字節,可用返回0.但要小心。並非所有的流都提供了這種方法的真正實現。 InputStream本身始終返回0.

如果您需要非阻塞功能,即從流中讀取而不被讀取時阻塞,請改爲使用NIO。

0

Java 7 documentation
「可以從該輸入流中讀取(或跳過)的字節數的不阻塞或0,當它到達輸入流的結束的估計」。

所以,我會說它在這種情況下應該返回0。這對我來說似乎也是最直觀的行爲。

2

流的..end是達到

請勿使用available()來檢測流結束!而是看由InputStream.read()返回int,其中:返回

如果沒有可用的字節,因爲流的末尾已到達,值-1。