いくつかのファイルがあり、いくつかのランダムなバイトと複数の gzip ファイルがあります。一部のファイル内でgzipストリームの開始と終了を見つけるにはどうすればよいですか? gzip ストリーム間に多くのランダム バイトがあります。したがって、基本的には gzip ファイルを見つけてそこから取得する必要があります。
8882 次
2 に答える
11
RFC 1952からの読み取り-GZIP:
各GZIPファイルは、含まれるファイルごとに1つずつ、データチャンク(メンバーと呼ばれる)の集まりにすぎません。
各メンバーは次のバイトで始まります。
- 0x1F(ID1)
- 0x8B(ID2)
- 圧縮方法。dファイルの場合は0x08 。
DEFLATE
0〜7は予約値です。 - フラグ。上位3ビットは予約されており、ゼロでなければなりません。
- (4バイト)最終変更時刻。0に設定できます。
- 圧縮方法によって定義された追加のフラグ。
- オペレーティングシステム、実際にはファイルシステム。0 = FAT、3 = UNIX、11 = NTFS
メンバーの終わりは区切られていません。あなたは実際にメンバー全員を歩かなければなりません。複数の有効なGZIPファイルを連結すると、有効なGZIPファイルが作成されることに注意してください。また、メンバーをオーバーシュートすると、メンバーの読み取りが成功する可能性があることにも注意してください(解凍ライブラリが熱心に完全に失敗しない限り)。
于 2012-10-28T20:54:45.533 に答える
5
3 バイトの gzip 署名 0x1f 0x8b 0x08 を検索します。見つかったら、0x1f で始まる gzip ストリームをデコードしてみてください。成功した場合、それは gzip ストリームであり、終了したところで終了しました。gzip ストリームがある場合はその後から、そうでない場合は 0x08 の後から検索を続けます。次に、それらすべてを見つけて、それらの位置とスパンを知ることができます。
于 2012-10-28T20:59:07.300 に答える