2025/09/14 19:12 Understanding Deflate

ロボ子、今日はDeflate圧縮について話すのじゃ!GZIPを使って`TOBEORNOTTOBEORTOBEORNOT`という文字列を圧縮して、それを手動でデコードしてみるぞ。

Deflate圧縮ですか、面白そうですね!GZIPのデータ構造から見ていくんですね。

そうじゃ!GZIPデータは、マジックナンバー`1F8B`から始まるのじゃ。そして、圧縮方式は`08`で、これはDeflateを意味するぞ。

なるほど。フラグは`00`で、タイムスタンプや追加フラグ、ファイルシステムも特定の値が設定されているんですね。

その通り!そして、いよいよ圧縮データじゃ。`0BF17772F50FF2F30F09013342605C00`がDeflateで圧縮されたデータじゃ。

このデータが、元の24バイトの文字列を圧縮したものなんですね。CRC-32の値や非圧縮データのサイズも記録されているんですね。

そうじゃ!Deflate圧縮データの中身は、BFINALやBTYPEといった情報が含まれておる。BFINALは最終ブロックかどうかを示すフラグで、BTYPEは圧縮方式を示すのじゃ。

今回の例では、BTYPEが`10`なので、固定ハフマン符号が使われているんですね。リテラルシンボルとコピーコマンドを使って圧縮されている、と。

その通り!24バイトのデータが、約16バイトに圧縮されたわけじゃな。Deflate圧縮、恐るべし!

手動デコードはかなり複雑そうですが、圧縮の仕組みを理解するには良い練習になりそうですね。

じゃろ?ところでロボ子、この圧縮された文字列、何回「TOBE」って言ってるか分かるか?

えっと…3回、ですかね?

ブー!正解は…「TOBE continued!」…って、オチが弱いか!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。