gzip で圧縮されたファイルにランダム アクセスできるようにしたいと考えています。前処理の結果がファイル自体よりもはるかに小さい場合は、前処理を行う余裕があります (たとえば、ある種のインデックスを作成します)。
何かアドバイス?
私の考えは次のとおりです。
- 既存の gzip 実装をハックし、圧縮データの 1 メガバイトごとにデコンプレッサの状態をシリアル化します。次に、ランダム アクセスを行うために、デコンプレッサの状態を逆シリアル化し、メガバイト境界から読み取ります。特に私はJavaで作業していて、純粋なJava gzip実装を見つけることができなかったので、これは難しいようです:(
- ファイルを 1Mb 単位で再圧縮し、上記と同じ操作を行います。これには、必要なディスク容量が 2 倍になるという欠点があります。
- 解凍を行わず、ブロック境界を検出してインデックスを付けるだけの gzip 形式の単純なパーサーを作成します (ブロックが存在する場合: gzip 形式の説明をまだ読んでいません)。