私はたくさんのファイルを圧縮し、ストリーム経由でデータを消耗させようとしています。DotNetZipストリーミング
可能な限りメモリフットプリントを小さくしたいと思います。
私のアイデアは、データメンバーとしてFileStreamオブジェクトがたくさんあるStreamを実装することでした。私のストリーム上のReadメソッドが呼び出されたとき、私は自分のファイルストリームの1つからいくつかのデータを読み込み、ZipOutputStreamインスタンスを使用して、一時的なストレージストリームに書き込みデータを書き込んだり、
この一時記憶ストリームはバイトのキューに過ぎません。これらのバイトが(Readへの呼び出しを介して)バッファに移動されると、それらはキューから削除されます。この方法では、まだ読み込まれていないバイトだけを格納していました。
残念ながら、ZipOutputStreamを処分すると、有効なzipファイルを作成するためにランダムなファイルの場所に書き込む必要があるようです。これにより私の「一瞬のデータ」ソリューションを使用できなくなります。
うまくいけば、これはすべて明確:)
は、zipファイルを作成するときにメモリフットプリントを最小限にする別の方法はありますか?助けてください!
ありがとうございます!
有効なzipファイルを生成するには、ZipOutputStreamでdispose()を呼び出す必要があります。 dispose()はシークする必要がない場合、何をしますか? – Jordan
通常の出力ストリームと同様です。バッファをフラッシュする必要があります。また、ファイル形式に必要なフッターも書き込む。 – svick
これは主に働きました...私はすべてのバグを修正しました。これは、Ionic.Zip.CountingStreamでシーク不可能なストリームを強制的にラップするように強制されたようです。これがなぜなのか? – Jordan