5

私はスレッドを実行していますが、実行するたびに、そこから読み取る新しい行があるかどうかを確認する必要がありますがBufferedReader、行が存在するのを待ってスタックし、コード全体が停止します。

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

読むテキストがあるかどうかを確認する方法はありBufferedReaderますか?

4

3 に答える 3

5

いいえ、それを行う簡単な方法はありません。 BufferedReader呼び出しがありますが、それは呼び出しreadyにのみ適用され、read呼び出しには適用されませんreadLinereadLineブロックしないことが保証されているが本当に必要な場合は、自分でバッファーを使用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、おそらくストリーム レベル自体まで下げる必要があります。には、あなたのニーズに答えるInputStreamメソッドがあります。available()

于 2012-11-28T01:17:02.170 に答える