BufferedReader readLine() blocks

I tried a lot of solutions but the only one not blocking the execution was the following:

BufferedReader inStream = new BufferedReader(new InputStreamReader(yourInputStream));
String line;
while(inStream.ready() && (line = inStream.readLine()) != null) {
    System.out.println(line);
}

The inStream.ready() returns false if the next readLine() call will block the execution.


The BufferedReader will keep on reading the input until it reaches the end (end of file or stream or source etc). In this case, the 'end' is the closing of the socket. So as long as the Socket connection is open, your loop will run, and the BufferedReader will just wait for more input, looping each time a '\n' is reached.


This is because of the condition in the while-loop: while((line = br.readLine()) != null)

you read a line on every iteration and leve the loop if readLine returns null.

readLine returns only null, if eof is reached (= socked is closed) and returns a String if a '\n' is read.

if you want to exit the loop on readLine, you can omit the whole while-loop und just do:

line = br.readLine()