ファイルをループするBufferedReaderがあります。特定のケースに遭遇したとき、リーダーの別のインスタンスを使用してループを続けたいと思いますが、この時点から始めます。
推奨される解決策のアイデアはありますか?別のリーダーを作成したり、マーク機能を使用したりしますか?
ファイルをループするBufferedReaderがあります。特定のケースに遭遇したとき、リーダーの別のインスタンスを使用してループを続けたいと思いますが、この時点から始めます。
推奨される解決策のアイデアはありますか?別のリーダーを作成したり、マーク機能を使用したりしますか?
私のコメントに対するあなたの答えを待っている間、私は仮定をすることに固執しています。
RandomAccessFile
それがあなたが評価する線方向の入力である場合、私が今(1.4または1.5以降)この方法をサポートしていることを発見したのと同じくらい嬉しい驚きかもしれませんreadLine
。もちろん、RandomAccessFileを使用すると、位置をきめ細かく制御できます。
バッファリングされたIOが必要な場合は、リーダーをラップアラウンドするCharacterBuffer
か、 APIByteBuffer
を使用してマップされたファイルをラップアラウンドすることを検討してください。nio
これにより、読み取りポインタを細かく制御して、ファイルをメモリとして扱うことができます。また、データはすべてメモリ内にあるため、バッファリングは無料で含まれています。
これまでに読んだ文字数を追跡している場合は、新しいBufferedReaderを作成し、skipを使用できます。
Noelが指摘しているように、改行を破棄して文字数を不正確にするため、の使用BufferedReader.readLine()
は避ける必要があります。readLine()
他の誰かがあなたのコードを維持しなければならない場合、おそらくreadLine()が呼び出されないことを期待すべきではありません。
を使用することにした場合はskip
、改行をカウントするオフセットを提供する独自のバッファ付きリーダーを作成する必要があります。