InputStream.available() 在 Java 中做了什么?

2022-08-31 15:24:41

Java中有什么作用?我阅读了文档,但我仍然无法弄清楚。InputStream.available()

文档说:

返回可以从此输入流读取(或跳过)的字节数,而不会被此输入流的方法的下一个调用方阻止。下一个调用方可能是同一线程或另一个线程。

类 InputStream 的可用方法始终返回 0。

他们所说的阻止是什么意思?这是否仅意味着同步呼叫?

最重要的是,这种方法的目的是什么?available()


答案 1

在 InputStreams 中,调用称为“阻塞”方法调用。这意味着,如果在方法调用时没有可用的数据,则该方法将等待数据可用。read()

该方法告诉您可以读取多少字节,直到调用将阻止程序的执行流。在大多数输入流上,所有对 的调用都是阻塞的,这就是为什么 available 默认返回 0 的原因。available()read()read()

但是,在某些具有内部缓冲区的流(如 具有内部缓冲区的 )上,某些字节被读取并保存在内存中,因此您可以在不阻塞程序流的情况下读取它们。在这种情况下,该方法会告诉您缓冲区中保留了多少字节。BufferedInputStreamavailable()


答案 2

此处的阻塞与线程或同步无关。相反,它与阻止 IO 有关(有关详细信息,请参阅内容)。如果您发出读取请求,并且通道没有可用的通道,则阻塞调用将等待(或阻止)直到数据可用(或通道关闭,引发异常等)。

那么为什么要使用?因此,您可以确定要读取的字节数,或者确定是否要阻止。available()

请注意,Java 还具有非阻塞 IO 功能。有关更多详细信息,请参阅此处


推荐