零的gzip压缩比

Udo*_*ein 6 compression gzip

如果我跑

dd if=/dev/zero bs=8192 count=1000000 | gzip --best >test.gz
Run Code Online (Sandbox Code Playgroud)

我得到一个7950131字节的输出文件.所以压缩比为~1/1000.但是我期望gzip使用行程编码+霍夫曼代码,因此至少会达到1/100000.为什么它不能为全零文件压缩更好?

Mar*_*ler 12

放气格式的最大压缩比为1032:1.这是因为可编码的最长运行时间为258字节.每次运行需要至少两位(长度代码为1位,距离代码为1位),因此每个压缩字节可编码4*258 = 1032个未压缩字节.

你可以通过gzip压缩gzip的结果来获得更多压缩.通常,这不会改善压缩,但对于很长时间的运行,它可以.

顺便说一句,deflate使用的LZ77方法比行程编码更通用.不是仅使用长度,而是使用长度/距离对.这允许从一定距离复制字符串,或者在运行长度中复制一个字节一个距离,或者复制三个距离为三的字节等.