2011-09-23 78 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。