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将与您需要的一样准确。
通常你不会得到超过 95% 的压缩(这样 10kB 的 gzipped 数据会解压缩到 ~200kB),但是有一些特制的文件会呈指数级扩展。寻找42.zip,它会解压缩到几 PB(无意义的)数据。
小智 8
deflate 格式的最大压缩比为 1032:1。这是因为可以编码的最长运行是 258 字节。每次运行至少需要两位(长度码一位,距离码一位),因此每个压缩字节可以编码 4*258 = 1032 个未压缩字节。
您可以通过对 gzip 的结果进行 gzip 压缩来获得更多压缩。通常这不会改善压缩,但对于很长时间的运行它可以。
顺便说一句,deflate 使用的 LZ77 方法比 run-length 编码更通用。不只是长度,而是使用长度/距离对。这允许从某个距离向后复制一个字符串,或复制一个字节,如运行长度为 1 的距离,或复制三元组的字节距离为 3 等。
任何压缩算法的压缩率都是被压缩数据的函数(除了数据的长度)。
这是MaximumCompression的分析,
看看其中一个示例,例如,
文件类型:多种文件类型(共 46 种) 在此测试中要压缩的文件数量:510 总文件大小(字节):316.355.757 平均文件大小(字节):620,305 最大文件(字节):18,403,071 最小文件(字节):3,554
| 归档时间: |
|
| 查看次数: |
164291 次 |
| 最近记录: |