0

ある時点でログ行が送信されるかどうかを確認するためのこのコードがあります。問題は、ログ行が私が望んでいた時間からのものでなくても、ファイルポインタが超過することです(「後で」時間の検索と言います)。行が最終的に取得された場合にのみ、ファイルポインターをインクリメントしたいanswer List<String>

@Override
public List<String> getForMinuteTimeFrame(LocalTime currentTime) {
    List<String> lines = new ArrayList<>();
    String line = null;
    while ((line = randomAccessFile.readLine()) != null) {
        if (fetchTime(line).isEqual(currentTime)) {
            lines.add(line);
        }
    }
    return lines;
}

どうすればこれをエレガントに行うことができますか? 入力ファイルは非常に大きい (~250 MB) ため、1 行ずつ読み取ります。

4

1 に答える 1

0

「randomAccessFile.getFilePointer()」を使用して現在のファイル ポイントを取得し、関心のある行を正常に読み取るたびに保存できるはずです。その後、戻る前に、randomAccessFile.seek() を使用して現在のファイル位置をその場所に戻すことができ、getFilePointer() から取得した値を渡します。これにより、読み取りポイントが、最後の行が読み取られる前の状態に復元されます。

于 2016-04-20T23:47:48.243 に答える