おそらく、ストリームを使用してデータを読み込み、別のストリームを使用してデータを書き出す必要があります。後でファイル内のデータにアクセスする必要がある場合は、ファイルを保存してください。まだ遭遇していないものにアクセスする必要がある場合は、1 回実行して「2 回目のパスに必要なものを保存してから、もう一度実行する」という 2 パス システムが必要です。
コンパイラはこのように動作します。
一度に配列全体をロードする唯一のケースは、配列全体の多くの場所に繰り返しランダムにアクセスする必要がある場合です。このような場合は、単一のコンテナ クラスにすべて格納されている複数のバイト配列にロードすることをお勧めします。
コンテナー クラスにはバイト配列の配列がありますが、外部からはすべてのアクセスが連続しているように見えます。バイト 49874329128714391837 を要求するだけで、クラスは Long を各バイト配列のサイズで割り、アクセスする配列を計算し、残りを使用してバイトを決定します。
また、一時コピーを作成する必要があるバイト配列境界にまたがる可能性のある「チャンク」を格納および取得するメソッドを持つこともできますが、いくつかの一時配列を作成するコストは、ロックされた2GBのスペースが割り当てられていないため、パフォーマンスが低下する可能性があります。
編集:ps。本当にランダムアクセスが必要で、ストリームを使用できない場合は、包含クラスを実装することは非常に良いアイデアです。これにより、コードの残りの部分を変更することなく、実装を単一のバイト配列からバイト配列のグループ、ファイルベースのシステムにその場で変更できます。