有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

阻止输入流的内容。可用()在Java中做什么?

InputStream.available()Java中做什么?我看了文件,但还是看不懂

医生说:

Returns the number of bytes that can be read (or skipped over) from this input stream without blocking by the next caller of a method for this input stream. The next caller might be the same thread or or another thread.

The available method for class InputStream always returns 0.

他们所说的阻塞是什么意思?这只是指一个同步通话吗

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


共 (2) 个答案

  1. # 1 楼答案

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

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

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

  2. # 2 楼答案

    在这里,阻塞与线程或同步无关。相反,它与阻塞IO有关(有关更多信息,请参见this)。如果发出读取请求,而通道没有可用数据,则阻塞调用将等待(或阻塞)直到数据可用(或通道关闭、抛出异常等)

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

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