I\'m running a thread and everytime it runs, It should be checking to see if there is a new line to read from the BufferedReader
although, it gets stuck waiting
The readLine
method will block unless it can read an entire line (delimited by a line-terminating character), or the end of input has been reached:
http://docs.oracle.com/javase/6/docs/api/java/io/BufferedReader.html#readLine()
The case you're describing is that the end of input hasn't yet been reached, but there's not enough characters in the buffer to constitute a "line" (that is, a series of characters ended by a line terminator).
You will have to go lower than the readLine
level for that, possibly to the Stream level itself. InputStream
has a method called available()
, which would answer your needs.
No, there's no easy way to do that. BufferedReader
has a ready
call, but that only applies to the read
calls, not the readLine
call. If you really want a readLine
that's guaranteed not to block, you must implement it yourself using read
and maintaining a char
buffer yourself.
Why don't you check if it's ready to be read first? Just use bufferedReader.ready().
Edit:
ready
won't tell you if you have a line ready, it will just tell you that there is something to be read. However, if you are expecting to get a line then this will work for you. The idea would be, first check if it's ready, and then read the line, in this way the thread won't be hanging there when there is absolutely nothing to read.