为什么ZIP压缩不压缩任何内容?


Answers:


70

如果要压缩已压缩的内容(AVI,JPEG,MP3),则除了将所有内容打包到单个文件中之外,您不会获得太多收益。


1
而且我什至已经看到它反向运行,导致压缩档案大于单个压缩文件。
Fiasco Labs '02

32

压缩通过在要压缩的项目内部寻找重复模式来进行。另外,由于您不想在压缩文件时丢失任何数据,因此压缩必须是无损的(*)。
现在,将其放在脑后,考虑一下文件(项目)在计算机上的存储方式。在最低级别上,它们都是一堆0和1。

因此,问题可以转换为:“ 我怎么能以比原始表示更紧凑的方式表示一堆1和0?

因此,让我们从头开始,如何压缩单个位(单个1或单个0)的普通表示形式?
答案真的很简单:您不能!...以最紧凑的方式表示单个位。

公平地说,让我们举一个更大的例子,如何压缩二进制字符串,如0111 0111 0100 0111
好吧,因为我们已经知道查看单个位根本不会对我们有帮助,所以我们知道我们必须考虑更大的规模。例如,让我们一次取4位。现在我们看到在示例中二进制字符串“ 0111”会出现3次,所以为什么不用0来表示呢?但这仍然使0100处于黑暗中,因此让我们用“ 1”表示。
我们知道已将原始文件压缩为:“ 0010”

这非常好!但是,这只是“霍夫曼编码算法”的基础知识,在现实世界中会比这复杂一些(而且您还需要在其中存储包含编码信息的表,但这是一个回答这个问题有点远)。

现在要真正回答您的问题:为什么不能对所有数据进行压缩那么好?让我们再举一个示例:“ 0001 0110 1000 1111”,如果我们使用与上述相同的技术,将无法压缩数据(找不到重复),因此无法从压缩中受益...


(*)当然有例外。最著名的例子是用于MP3文件的压缩。在这里,有关声音的某些信息在将其从原始原始文件转换为MP3格式时会丢失,因此这种压缩是有损的。另一个示例是图像的.JPG格式


6

压缩过程采用可重复的模式,并将其标记为较短的模式。这样,输出几乎是不可重复的,因此根本无法压缩太多。


6

上无损压缩维基百科文章的限制部分

无损数据压缩算法不能保证对所有输入数据集进行压缩。换句话说,对于任何(无损)数据压缩算法,将有一个输入数据集,当该算法处理时,输入数据集不会变小。使用计数参数的基础数学很容易证明这一点。...

基本上,从理论上讲,无损压缩所有可能的输入数据是不可能的。


压缩已经压缩的数据比较困难。图片和视频大部分都经过压缩,因为原始尺寸会很大
phuclv 2014年

4

这正常吗?

否。不适用于“普通”文件。您要压缩哪种文件?如果它们已经被压缩,例如它们是JPG,GIF,PNG,视频或什至其他zip文件,则它们不会被任何算法压缩太多。如果尝试压缩Text,XML,未压缩的BMP,源代码等文件,则zip将提供良好的压缩效果,但可能不是绝对最佳。

人们为什么继续在Windows上使用ZIP?

原因之一是系统中内置了良好的zip处理功能-您可以右键单击任意位置并创建一个新的zip文件,然后将其放入其中。您只需双击一个zip文件,它就会像一个文件夹一样打开。您可以从其中复制内容,有时甚至可以就地使用它。您不需要安装WinZip或7z或任何其他程序。我通常建议人们不要。


2

在包含许多文件的zip归档文件中,每个文件都是独立压缩的。如果文件之间有很多相似之处,则使用其他工具可以提供更好的压缩效果。

例如,tar.gz将文件连接在一起,然后压缩结果。同样,“可靠” rar文件使用文件之间的相似性。

tar.gz或可靠的rar的缺点是,您无法从大型归档文件中提取单个文件,而无需将归档文件解压缩到所需文件所在的位置。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.