古い記事なのですが、気になる箇所を見つけました。
訂正のお知らせ(2009年3月31日)
読者から上記のサンプルコード、「while (objBr.ready())」について貴重なご指摘をいただき、コードを差し替え、また編集部注を追記させて頂きました。
内容について正確を期せずに混乱を招いた点、読者の皆様におわび申し上げます。
なぜか最近修正されています。
BufferedReader#ready() による判定から BufferedReader#readLine() の判定に変更されたということなのでしょうけど、変更内容について言及されていないのため、なにが問題だったのかわからないのです。
調べてみたところ、ready() に気になる記述がありました。
次の read() が入力をブロックしないのが確実な場合は true、そうでない場合は false。false が返されても、次の読み込みが確実にブロックするというわけでない
BufferedReader (Java 2 Platform SE 5.0)
ものすごくわかりにくいのですが、”falseでも読み込み対象がなくなったとは限らないよ”ということなんだと思います。疑わしきは false。
つまり、ファイル終端まで読み込むための判定とは目的が違うということです。
まあ記事の修正と関係あるのかはわかりませんが、ファイルなどを全部読み込む目的で ready() は使わないほうがよさそうです。
■ 参考
2003年12月のアレ
- Newer: 技術書:BEST SOFTWARE WRITING
- Older: その後連絡が途絶えました
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://blog.magellanic.net/archives/437/trackback
- Listed below are links to weblogs that reference
- BufferedReaderの終端判定とか from Olen Onnellinen 2