- - PR -
readLineでのEOF検出について
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2003-11-22 17:11
動作環境は
RedHat9 JDK1.4.1_03 または Win2K JDK1.4.1_01 で行なっています。 コーディングは特別に何も使用せずにエディタ上で行なっています。 readLine自体は比較的皆さん使われていると思うのですが(私は初めてですが...) 他に回避策があればご教授お願い致します。 やりたいことは単純にテキストファイルからあるキーワードのものを抜くだけです。 メールから From: To: Subject: 本文です。 その本文の直前に空行があり処理がストップしてしまっているのです。 | ||||
|
投稿日時: 2003-11-23 23:41
あの・・・僕が示した例でも駄目だったのでしょうか? | ||||
|
投稿日時: 2003-11-24 11:40
RedHat9/j2sdk1.4.1_02, Win2k/j2sdk1.4.2_02 では再現しません。
他の部分に問題があるのではないでしょうか? | ||||
|
投稿日時: 2003-11-25 14:50
結果報告です。
ぽんさんの提示していただいたサンプルでうまくいきました。 ありがとうございました。 でも、なんでですかね今ひとつしっくりこないです。 | ||||
|
投稿日時: 2003-11-26 02:32
ぽんさんのコードでは、"/dev/tty" をファイル名に指定した場合や
後にコードをかえてソケットやパイプをストリームに渡した場合など 上手く動作しなくなるとおもうのですが。 下記コードでも起きるか試してください。
| ||||
|
投稿日時: 2003-12-02 03:00
JDK のバグなら追求したいので答えて欲しいなぁ・・・
| ||||
|
投稿日時: 2003-12-02 09:45
unibon です。こんにちわ。
私も気になっていて、つぎのようなことをいろいろ考えていました。 (1) 改行コードの差異(CR だけ, LF だけ, CR + LF)を考慮した取り扱いは、 BufferedReader の中だけで処理していて他のクラスは関係ない。 デフォルトの Charset やその他実行環境にも一切依存しない。 したがって、改行コードは関係ないと思う。 (2) もしもファイルの持つ文字コードと、 InputStreamReader(やそのサブクラスの FileReader) の Charset が違うと、 ファイルの読み込み途中で終わってしまう可能性はもしかしたらあるのかもしれない。 そのために一時的に InputStreamReader に対する Charset の指定として、 ISO-8859-1 などを指定すると良いかもしれません。 もちろん文字化けはしますが余計なデコード処理はしなくなるので良いと思います。 でもたぶん関係ないと思う。 #再現できるとしたらセキュリティも絡む可能性がある重大なバグ発見という偉業だと思います。 | ||||
|
投稿日時: 2003-12-02 17:16
unibon です。こんにちわ。
バグ絡みとしては、自分では経験はないのですが、 http://developer.java.sun.com/developer/bugParade/bugs/4879522.html というものが有名です。 無限ループするから、readLine から返ってこなくなって、 返り値が print されなくなるので、EOF のように見えてしまった、 というストーリも考えられなくはないかもしれません。 #でもデフォルトが ISO-2022-JP という環境はあまりなさそう? | ||||
