java输入流

java输入流,java,inputstream,Java,Inputstream,当到达流的末尾时,InputStream的available()方法应该返回什么 文档没有指定行为。理论上,如果到达流的末尾,则没有要读取的字节,可用的返回0。但是要小心。并非所有流都提供了此方法的真正实现。InputStream本身始终返回0 如果您需要非阻塞功能,即从流中读取而不在读取时被阻塞,请改用NIO 来自: “估计可以从此输入流中读取(或跳过)而不阻塞的字节数,或在到达输入流末尾时为0。” 所以,我认为在这种情况下它应该返回0。对我来说,这似乎也是最直观的行为。返回可从此输入流读取(

当到达流的末尾时,
InputStream
available()
方法应该返回什么


文档没有指定行为。

理论上,如果到达流的末尾,则没有要读取的字节,可用的返回0。但是要小心。并非所有流都提供了此方法的真正实现。InputStream本身始终返回0

如果您需要非阻塞功能,即从流中读取而不在读取时被阻塞,请改用NIO

来自:
“估计可以从此输入流中读取(或跳过)而不阻塞的字节数,或在到达输入流末尾时为0。”


所以,我认为在这种情况下它应该返回0。对我来说,这似乎也是最直观的行为。

返回可从此输入流读取(或跳过)的字节数的估计值,而无需下次调用此输入流的方法进行阻止。下一次调用可能是同一个线程或另一个线程。单个读取或跳过这么多字节不会阻塞,但可能读取或跳过更少的字节

The available method for class InputStream always returns 0. 

JavaDoc确实在返回部分告诉您-

(来自)

…到达流的末端

不要使用
available()
检测流结束!而是查看返回的
int
,其中:

如果由于到达流的结尾而没有字节可用,则返回值-1


好的,文档确实说这个方法应该被子类覆盖,所以行为取决于实现,对于不同类型的流可能会有所不同。我的错。它不阻止非阻塞IO使用吗?
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.