3

一連のファイルを圧縮し、ストリームを介してデータを消費できるようにしようとしています。

メモリフットプリントをできるだけ小さく保ちたいです。

私の考えは、一連の FileStream オブジェクトをデータ メンバーとして持つ Stream を実装することでした。Stream の Read メソッドが呼び出されると、ファイル ストリームの 1 つからデータを読み取り、ZipOutputStream インスタンスを使用して圧縮データを一時ストレージ ストリームに書き込み、それから読み取り要求を転送します。

この一時ストレージ ストリームは、単なるバイトのキューになります。これらのバイトは (Read の呼び出しを介して) バッファーに移動されると、キューから削除されます。このようにして、まだ読み取られていないバイトのみを保存します。

残念ながら、有効な zip ファイルを作成するには、ZipOutputStream を破棄するときにランダムなファイルの場所に書き込む必要があるようです。これにより、「一時的なデータ」ソリューションを使用できなくなります。

うまくいけば、これはすべて明確です:)

zip ファイルを作成するときにメモリ フットプリントを最小限に抑える別の方法はありますか? 助けてください!

ありがとう!

4

1 に答える 1

1

ZipOutputStream出力ストリームのランダムな場所に書き込む必要はありません (つまり、 を呼び出しますSeek())。ただし、書き込んでいるストリームがそれを報告する場合CanSeek、その機能を使用して一部のヘッダーを更新します。

したがって、書き込み先のストリームが返さfalseCanSeek()、すべてが正常に機能することを確認してください。

于 2012-02-07T20:31:15.137 に答える