5

我正在运行一个线程,每次它运行时,它应该检查是否有新的行可以读取,BufferedReader尽管它在等待一行存在时卡住了,从而停止了整个代码。

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

有没有办法更好地检查 a 中是否有BufferedReader要阅读的文本?

4

3 回答 3

5

不,没有简单的方法可以做到这一点。 BufferedReaderready电话,但这仅适用于read电话,而不适用于readLine电话。如果你真的想要一个readLine保证不会阻塞的东西,你必须自己使用read和维护一个char缓冲区来实现它。

于 2012-11-28T01:15:14.980 回答
2

你为什么不先检查它是否准备好阅读?只需使用bufferedReader.ready().

编辑:

ready不会告诉你是否准备好了一行,它只会告诉你有东西要读。但是,如果您希望得到一条线,那么这对您有用。这个想法是,首先检查它是否准备好,然后阅读该行,这样当绝对没有什么要阅读的时候,线程就不会挂在那里。

于 2012-11-28T01:23:46.220 回答
0

readLine方法将阻塞,除非它可以读取整行(由行终止字符分隔),或者已经到达输入的结尾:

http://docs.oracle.com/javase/6/docs/api/java/io/BufferedReader.html#readLine ()

您描述的情况是尚未到达输入的结尾,但缓冲区中没有足够的字符来构成“行”(即以行终止符结尾的一系列字符)。

您将不得不低于该readLine级别,可能是 Stream 级别本身。InputStream有一个名为 的方法available(),可以满足您的需求。

于 2012-11-28T01:17:02.170 回答