来自java 文档
返回可以从此输入流中读取(或跳过)的字节数的估计值,而不会被下一次调用此输入流的方法阻塞。下一次调用可能是同一个线程或另一个线程。单次读取或跳过这么多字节不会阻塞,但可能会读取或跳过更少的字节。请注意,虽然 InputStream 的某些实现会返回流中的字节总数,但许多不会。使用此方法的返回值来分配旨在保存此流中所有数据的缓冲区是不正确的。
如果此输入流已通过调用 close() 方法关闭,则此方法的子类的实现可以选择抛出 IOException。
InputStream 类的可用方法总是返回 0。
这个方法应该被子类覆盖。
这是一个注释以了解它为什么返回 0
在 InputStreams 中,read() 调用被称为“阻塞”方法调用。这意味着如果在方法调用时没有数据可用,该方法将等待数据可用。
available() 方法告诉您在 read() 调用将阻塞程序的执行流程之前可以读取多少字节。在大多数输入流中,所有对 read() 的调用都是阻塞的,这就是为什么 available 默认返回 0 的原因。
但是,在某些流(例如具有内部缓冲区的 BufferedInputStream)上,会读取一些字节并将其保存在内存中,因此您可以在不阻塞程序流的情况下读取它们。在这种情况下,available() 方法会告诉您缓冲区中保留了多少字节。