java - FileInputStream.read() 什么时候阻塞?

标签 java inputstream blocking java-io fileinputstream

问题类似于下面两个问题。

但我还是不能完全理解。

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

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

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

javadoc 说如果没有输入可用则此方法阻塞

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

谢谢。

最佳答案

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

This method blocks if no input is yet available.

Returns: the next byte of data, or -1 if the end of the file is reached.

所以,一个空文件会让你立即得到一个-1(而不是read()阻塞)

  • 输入可用,因为文件存在
  • ...但是它是空的,所以立即结束。

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

干杯,

关于java - FileInputStream.read() 什么时候阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15218750/

相关文章:

java - Spring mvc 不调用 Controller

java - 将 JSch 的标准 iostream 重定向到 primefaces 的终端

multithreading - 使用阻塞调用时如何退出程序

java - InputStream 和 ByteArrayInputStream 有什么区别?

java - 从 Java 运行 exec 命令是否需要 "bash"?

timeout - 在 Smalltalk 中读取超时的文件流(命名管道)

Java 卡在 foreach 循环上

java - 从列表中获取唯一/不重复的值

java - 当前运行的类或 JAR 文件的位置

java - fragment getActivity() 与接口(interface)回调?