FileInputStream.read()什么时候阻止?

lia*_* xu 5 java inputstream blocking fileinputstream java-io

问题类似于以下两个问题.

但我仍然无法完全理解它.

到目前为止,我认为以下代码中的read()方法将因空文件'test.txt'而阻塞.

FileInputStream fis = new FileInputStream("c:/test.txt");
System.out.println(fis.read());
System.out.println("to the end");
Run Code Online (Sandbox Code Playgroud)

实际上它会打印-1,我想知道为什么.

javadoc说如果还没有输入,则此方法会阻塞.

什么" 没有输入可用 "是什么意思?

谢谢.

And*_*rup 5

您可以在JavaDoc for .read()中找到您的问题的答案:

如果尚未提供输入,此方法将阻止.

返回:数据的下一个字节,如果到达文件末尾,则返回-1.

因此,一个空文件将立即-1(而不是read()阻止)为您

  • 还有就是可用的输入,因为该文件存在
  • ......但它是空的,所以立即EOF.

...尚无输入可用...状况可能会发生如.当一个人要从命名管道而不是普通文件中读取时,管道的另一端还没有写入任何东西.

干杯,