有什么方法可以预测在任意字符串上使用 gzip 会得到什么样的压缩结果?哪些因素会导致最坏和最好的情况?我不确定 gzip 是如何工作的,但例如像这样的字符串:
"fffffff"
与以下内容相比可能会压缩得更好:
"abcdefg"
我从哪里开始?
谢谢
最佳答案
gzip 使用 deflate algorithm ,粗略地描述,它通过用指向字符串第一个实例的指针替换重复的字符串来压缩文件。因此,高度重复的数据压缩得非常好,而纯粹随机的数据压缩得很少(如果有的话)。
通过演示:
[chris@polaris ~]$ dd if=/dev/urandom of=random bs=1048576 count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.296325 s, 3.5 MB/s
[chris@polaris ~]$ ll random
-rw-rw-r-- 1 chris chris 1048576 2010-08-30 16:12 random
[chris@polaris ~]$ gzip random
[chris@polaris ~]$ ll random.gz
-rw-rw-r-- 1 chris chris 1048761 2010-08-30 16:12 random.gz
[chris@polaris ~]$ dd if=/dev/zero of=ordered bs=1048576 count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.00476905 s, 220 MB/s
[chris@polaris ~]$ ll ordered
-rw-rw-r-- 1 chris chris 1048576 2010-08-30 16:12 ordered
[chris@polaris ~]$ gzip ordered
[chris@polaris ~]$ ll ordered.gz
-rw-rw-r-- 1 chris chris 1059 2010-08-30 16:12 ordered.gz
由于开销,我的纯随机数据样本实际上变得更大,而我的全零文件压缩到之前大小的 0.1%。
关于compression - gzip 压缩异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3604866/