我正在运行一个线程并且每次运行时都应该检查是否有一条新行要从BufferedReader
读取,但它会等待一条线存在,从而停止整个代码。
if((inputLine = bufferedReader.readLine()) != null){
System.out.println(inputLine);
JOptionPane.showMessageDialog(null, inputLine);
}
有没有办法更好地检查BufferedReader
中是否有文字需要阅读?
答案 0 :(得分:3)
不,没有简单的方法可以做到这一点。 BufferedReader
有一个ready
来电,但这仅适用于read
来电,而不适用于readLine
来电。如果您确实希望readLine
保证不会阻止,则必须使用read
自行实施并自行维护char
缓冲区。
答案 1 :(得分:1)
为什么不检查它是否已准备好先读?只需使用bufferedReader.ready()
。
修改强>
ready
不会告诉你,如果你准备好了一条线,它会告诉你有什么东西要读。但是,如果您希望获得一条线,那么这将适合您。这个想法是,首先检查它是否准备就绪,然后读取该行,这样当没有任何东西可读时,线程就不会挂在那里。
答案 2 :(得分:0)
readLine
方法将阻止,除非它可以读取整行(由行终止字符分隔),或者已达到输入结束:
http://docs.oracle.com/javase/6/docs/api/java/io/BufferedReader.html#readLine()
您所描述的情况是尚未达到输入结束,但缓冲区中没有足够的字符构成“行”(即,由行终止符结束的一系列字符)
您必须低于readLine
级别,可能要低于Stream级别本身。 InputStream
有一个名为available()
的方法,可以满足您的需求。