Compression 零的gzip压缩比

Compression 零的gzip压缩比,compression,gzip,Compression,Gzip,如果我跑 dd if=/dev/zero bs=8192 count=1000000 | gzip --best >test.gz 我得到一个7950131字节的输出文件。因此压缩比约为1/1000。然而,我期望gzip使用运行长度编码+哈夫曼编码,因此至少可以达到1/100000。为什么对于一个全零文件来说压缩效果没有任何改善?deflate格式的最大压缩比是1032:1。这是因为可以编码的最长运行是258字节。每次运行至少需要两位(一位用于长度代码,一位用于距离代码),因此每压缩一个

如果我跑

dd if=/dev/zero bs=8192 count=1000000 | gzip --best >test.gz

我得到一个7950131字节的输出文件。因此压缩比约为1/1000。然而,我期望gzip使用运行长度编码+哈夫曼编码,因此至少可以达到1/100000。为什么对于一个全零文件来说压缩效果没有任何改善?

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

通过gzip压缩gzip的结果,可以获得更多压缩。通常情况下,这不会改善压缩效果,但在很长的时间内,它可以


顺便说一下,deflate使用的LZ77方法比游程编码更通用。使用长度/距离对,而不仅仅是长度。这允许从某个距离向后复制字符串,或者复制一个字节作为一个距离的运行长度,或者复制三个距离为三的字节,等等。

Aha,这解释了很多。尤其是为什么这一比例如此接近1032。非常感谢您的见解。