大きなファイルを1行ずつ読み取り、重複する行を削除するバッファ付きリーダーがあります。
ファイル全体をメモリにロードする代わりに、2つのバッファリーダーを使用してこれを実行します。最初のリーダーは、ファイルの固定部分を反復処理し、各部分を1つずつメモリにロードします。
各反復で、2番目のバッファリングされたリーダーは、最初のリーダーが停止した場所からファイルの最後まで、ロードされた部分がファイルに存在しないことを確認します。
問題は、最初のオブジェクトが停止した位置から開始するために、新しい独立したバッファリングされたリーダーオブジェクト(参照ではない)を作成できないことです。
最初のバッファリングされたリーダーのファイル位置を見つけて、2番目のバッファリングされたリーダーにどこから始めればよいかを伝える方法が必要です。
私がこれまでに試したこと:
最初のオブジェクトを2番目のコンストラクターに送信します。
これは実際には機能しましたが、両方に同じイテレータがあったため、最初のイテレータは2番目のイテレータとともにファイルの最後に移動しました
BufferedReader cleanfilereader2 = new BufferedReader(cleanfilereader);
bufferedReader.mark()
バッファリングされたリーダーの位置を設定しますが、それでも最初のリーダーの位置を知る必要があります。
ノート:
- 行数は一定ではありません
- ファイル全体をメモリにロードできません
- 時間と記憶の両方が問題です