Search code examples
javainputstreamblockingjava-iofileinputstream

when does FileInputStream.read() block?


The question is similar to the following two questions.

But I still cannot fully understand it.

So far I think the read() method in following code will block due to the empty file 'test.txt'.

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

Actually it will print -1, I want to know why.

The javadoc says This method blocks if no input is yet available.

What does 'no input is available' mean?

thanks.


Solution

  • The answer to your question can be found in the JavaDoc for .read():

    This method blocks if no input is yet available.

    and

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

    So, an empty file will get you an immediate -1 (instead of read() blocking) as

    • there is input available, since the file exists
    • ...but it is empty, so immediate EOF.

    The ...No input is yet available... situation could occur eg. when one was to read from a named pipe instead of a plain file, and the other side of the pipe hasn't written anything yet.

    Cheers,