gzip的最大压缩比是多少?

Zom*_*ies 56 compression algorithm gzip

gzip(举例来说,10kb)可以解压到的最大尺寸是多少?

Dav*_*ett 97

2020-02-06 更新:如评论中所述,我一直无法使用 gzip 重现原始结果。假设我在最初的快速测试中不小心使用了不同的压缩格式,我已经用 gzip 重复了,并相应地更新了下面的数字。这个新结果与其他答案/评论中所述的理论最大压缩一致。


这在很大程度上取决于被压缩的数据。使用标准版本的 gzip(使用默认选项或指定 -9)对一个充满零的 1Gb 文件进行快速测试,压缩后的大小约为 1018Kb,因此您的 10Kb 文件可能会扩展到约 10Mbytes。

如果数据一开始就具有低冗余,例如,存档包含本机压缩格式(gif、jpg、png 等)的图像文件,则 gzip 可能根本不添加进一步压缩。对于像程序可执行文件这样的二进制文件,您可能会看到高达 2:1 的压缩率,对于纯文本、HTML 或其他标记,3:1 或 4:1 或更高的压缩率是不太可能的。在某些情况下,您可能会看到 10:1,但在充满单个符号的文件中看到的 ~1030:1 是您在类似人为环境之外不会看到的。

您可以检查解压缩 gzip 文件会产生多少数据,而无需实际将其未压缩的内容写入磁盘,使用gunzip -c file.gz | wc --bytes- 这将解压缩文件但不存储结果,而是将它们传递给wc将计算它们传递的字节数然后丢弃它们。如果压缩内容是包含许多小文件的 tar 文件,您可能会发现解压完整档案需要明显更多的磁盘空间,但在大多数情况下,从管道gunzip输出返回的计数wc将与您需要的一样准确。


lio*_*ori 9

通常你不会得到超过 95% 的压缩(这样 10kB 的 gzipped 数据会解压缩到 ~200kB),但是有一些特制的文件会呈指数级扩展。寻找42.zip,它会解压缩到几 PB(无意义的)数据。

  • 那是 zip,不是 gzip (6认同)
  • 实际上,42.zip 对自动递归扫描 zip 文件的工具(例如病毒扫描程序)来说尤其危险。 (5认同)
  • 维基百科 [说](http://en.wikipedia.org/wiki/Zip_bomb) 42.zip 是“包含五层嵌套的 zip 文件,每组 16 个”,因此这不是解压缩的有效示例(仅用于递归减压)。 (4认同)

小智 8

/sf/answers/1175647231/逐字引用

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

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

顺便说一句,deflate 使用的 LZ77 方法比 run-length 编码更通用。不只是长度,而是使用长度/距离对。这允许从某个距离向后复制一个字符串,或复制一个字节,如运行长度为 1 的距离,或复制三元组的字节距离为 3 等。


nik*_*nik 6

任何压缩算法的压缩率都是被压缩数据的函数(除了数据的长度)。

这是MaximumCompression的分析,
看看其中一个示例,例如,

多文件压缩基准测试总结

文件类型:多种文件类型(共 46 种)  
在此测试中要压缩的文件数量:510  
总文件大小(字节):316.355.757 
平均文件大小(字节):620,305
最大文件(字节):18,403,071
最小文件(字节):3,554


小智 5

文件中有 10 MB 的零,用 gzip -9 压缩到 10217。所以最大比率看起来大约是 1000 倍。