解決策があなたの要件に依存するので、これはあなたに多くの助けになるかどうかはわかりませんが、私が取り組んでいるプロジェクトに似た問題があった(少なくとも私はそう考えています)。多くのテキスト記事をドライブに保存し、無作為にアクセスしてください。データのサイズのために圧縮する必要があります。
このすべてのデータを一度に圧縮するという問題は、ほとんどのアルゴリズムが復元時に以前のデータに依存することです。例えば、普及しているLZWメソッドは、解凍中にadictionary(データを解凍する方法に関する命令)を作成しますので、途中からストリームを解凍することはできませんが、それらのメソッドが調整されている可能性があります。
解決方法圧縮率を下げても、データをまとめることが最も効果的であることが判明しました。私のプロジェクトでは単純でした。各記事は1つのチャンクで、1つずつ圧縮した後、それぞれのチャンクが始まる場所にインデックスファイルを作成しました。その場合、簡単に解凍できました。私が望む記事
だから、私のファイルはこのように見えた:
Index; compress(A1); compress(A2); compress(A3)
代わりの
compress(A1;A2;A3)
。
このようにエレガントな方法でデータを分割できない場合は、チャンクを人為的に分割することができます。たとえば、データを5MB単位でパックすることができます。したがって、7MBから13MBのデータを読み込む必要がある場合は、チャンク5-10と10-15を解凍します。 あなたのインデックスファイルは、その後、次のようになります。
0 -> 0
5MB -> sizeof(compress 5MB)
10MB -> sizeof(compress 5MB) + sizeof(compress next 5MB)
この解決策の問題は、それがわずかに悪化し、圧縮比を与えるということです。チャンクが小さいほど、圧縮が悪くなります。
他のファイルをハードディスクに保存しなければならないわけではありません。ファイルを1つのファイルにまとめて、いつ起動するのかを覚えておいてください。
また、http://dotnetzip.codeplex.com/は、圧縮に使用できるzipファイルを作成するための素晴らしいライブラリであり、C#で書かれています。私にはうってつけで、1つのzipファイルに多数のファイルを作成するという組み込みの機能を使用して、データを分割することができます。
私がここに見る問題は、ほとんどの圧縮アルゴリズムがそのような機能をサポートしていないことです。なぜなら、解凍100-202は以前のデータを必要とする。もしあなたがあなたの質問を拡大できますか?あなたは元のファイルのどの部分をあなたが将来圧縮解除したいのか知っていますか?あなたは確信しています、あなたは90-202ではなく100-202を解凍するでしょうか?これは私が考えて助けることができる –