BufferedReader,检测是否还有文本要读取

时间:2012-11-28 01:09:57

标签: java bufferedreader java-io

我正在运行一个线程并且每次运行时都应该检查是否有一条新行要从BufferedReader读取,但它会等待一条线存在,从而停止整个代码。

if((inputLine = bufferedReader.readLine()) != null){
                System.out.println(inputLine);
                JOptionPane.showMessageDialog(null, inputLine);
}

有没有办法更好地检查BufferedReader中是否有文字需要阅读?

3 个答案:

答案 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()的方法,可以满足您的需求。