- PR -

readLineでのEOF検出について

投稿者投稿内容
しろくま
会議室デビュー日: 2003/10/02
投稿数: 11
投稿日時: 2003-11-22 17:11
動作環境は
RedHat9
JDK1.4.1_03
または
Win2K
JDK1.4.1_01
で行なっています。
コーディングは特別に何も使用せずにエディタ上で行なっています。
readLine自体は比較的皆さん使われていると思うのですが(私は初めてですが...)
他に回避策があればご教授お願い致します。
やりたいことは単純にテキストファイルからあるキーワードのものを抜くだけです。
メールから
From:
To:
Subject:
本文です。
その本文の直前に空行があり処理がストップしてしまっているのです。
ぽん
大ベテラン
会議室デビュー日: 2003/05/13
投稿数: 157
投稿日時: 2003-11-23 23:41
あの・・・僕が示した例でも駄目だったのでしょうか?
Keisuke
大ベテラン
会議室デビュー日: 2003/10/24
投稿数: 105
投稿日時: 2003-11-24 11:40
RedHat9/j2sdk1.4.1_02, Win2k/j2sdk1.4.2_02 では再現しません。
他の部分に問題があるのではないでしょうか?
しろくま
会議室デビュー日: 2003/10/02
投稿数: 11
投稿日時: 2003-11-25 14:50
結果報告です。
ぽんさんの提示していただいたサンプルでうまくいきました。
ありがとうございました。
でも、なんでですかね今ひとつしっくりこないです。
Keisuke
大ベテラン
会議室デビュー日: 2003/10/24
投稿数: 105
投稿日時: 2003-11-26 02:32
ぽんさんのコードでは、"/dev/tty" をファイル名に指定した場合や
後にコードをかえてソケットやパイプをストリームに渡した場合など
上手く動作しなくなるとおもうのですが。

下記コードでも起きるか試してください。
コード:
import java.io.*;
public class ReadLineTest {
public static final String file = "test.txt";
public static void main(String[] args) {
  try{ 
    FileReader fr = new FileReader( file ); 
    BufferedReader br = new BufferedReader( fr ); 

    String s; 
    while((s = br.readLine())!=null){ 
      System.out.println(s);
    } 
  } catch (Exception e) {
    e.printStackTrace();
  }
}
}

Keisuke
大ベテラン
会議室デビュー日: 2003/10/24
投稿数: 105
投稿日時: 2003-12-02 03:00
JDK のバグなら追求したいので答えて欲しいなぁ・・・
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2003-12-02 09:45
unibon です。こんにちわ。

引用:

Keisukeさんの書き込み (2003-12-02 03:00) より:
JDK のバグなら追求したいので答えて欲しいなぁ・・・


私も気になっていて、つぎのようなことをいろいろ考えていました。

(1) 改行コードの差異(CR だけ, LF だけ, CR + LF)を考慮した取り扱いは、
BufferedReader の中だけで処理していて他のクラスは関係ない。
デフォルトの Charset やその他実行環境にも一切依存しない。
したがって、改行コードは関係ないと思う。

(2) もしもファイルの持つ文字コードと、
InputStreamReader(やそのサブクラスの FileReader) の Charset が違うと、
ファイルの読み込み途中で終わってしまう可能性はもしかしたらあるのかもしれない。
そのために一時的に InputStreamReader に対する Charset の指定として、
ISO-8859-1 などを指定すると良いかもしれません。
もちろん文字化けはしますが余計なデコード処理はしなくなるので良いと思います。
でもたぶん関係ないと思う。

#再現できるとしたらセキュリティも絡む可能性がある重大なバグ発見という偉業だと思います。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2003-12-02 17:16
unibon です。こんにちわ。

バグ絡みとしては、自分では経験はないのですが、
http://developer.java.sun.com/developer/bugParade/bugs/4879522.html
というものが有名です。
無限ループするから、readLine から返ってこなくなって、
返り値が print されなくなるので、EOF のように見えてしまった、
というストーリも考えられなくはないかもしれません。
#でもデフォルトが ISO-2022-JP という環境はあまりなさそう?

スキルアップ/キャリアアップ(JOB@IT)