compression - gzip 压缩异常?

标签 compression gzip

有什么方法可以预测在任意字符串上使用 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/

相关文章:

c - C 语言无损数据压缩,无需动态内存分配

java - 使用霍夫曼编码技术将给定图像压缩 n 次

ios - 如何减小通过手机上的 iOS 应用程序录制的视频的文件大小

java - 压缩 hadoop mapreduce 输出的最简单有效的方法

java - 使用 jzlib 创建 gzip 文件

c# - HttpWebRequest 和原生 GZip 压缩

node.js - 压缩 Node.js 响应

python - 使用 h5py 压缩现有文件

xml - 使用 gzip 编码对同一服务器内的通信有意义吗?

java - 我需要使用 java 提取 .tar.Z 文件