文件是如何压缩的?

说到压缩,大家都会想到WINZIP或者RAR之类的压缩软件。事实上,计算机压缩技术的内涵和应用从未止步于此。我们可以在电脑上欣赏优美的电影和甜美的歌曲,压缩技术功不可没。在互联网的传输速度远远不能满足我们需求的今天,网络压缩技术显得尤为重要。正是有了它,我们才能实现网络视频/音频的实时传输。压缩技术正在不知不觉中改变着我们的生活。

预备知识二进制和ASCII编码

计算机的基本存储单位是字节。ASCII码是以字节为单位对常用符号进行编码的方案,因其合理性而广受欢迎。因为一个字节有8位,所以ASCII最多可以编码2 ^ 8 = 256个字符,其中前128称为标准ASCII码(二进制数00000000-01111165438)后165438称为扩展ASCII码(二进制数10000008比如汉字“王”占用的两个ASCII码分别是205和245,十六进制表示是CD和F5,二进制表示是111101和1165438。也就是说,当计算机处理汉字“王”时,计算机中的信息是“1101111165438+”。再比如大写英文字母“A”的ASCII码是65,十六进制表示是41。电脑里的信息其实是“0100001”。

收缩压缩

知道了上面的原理之后,我们再来介绍一下“收缩压缩”的原理。“缩写”是为了减少编码中不必要的“比特”。例如,文件中没有汉字,这意味着内容中没有使用扩展ASCII码,因此所有字符码的第七位(第一位)将为0。利用这个,我们可以收缩这个位,假设文件内容是ABCDEFGH。

文件内容:ABCDEFGH

二进制内容:0100000100010000110001000100065438。1000111 01001000

压缩文件内容:[中文显示的内容有乱码,无法写入]

二进制内容:10000100010100011100065438+。

这个压缩过程就是把原来头上的全零去掉,每8个比特重新排列,这样原来占8个字节的文件只占了7个字节。只要在解压缩时添加第七位0,就可以将文件恢复到原来的状态。这种压缩技术特别适用于数字压缩。因为从0到9这十个阿拉伯数字所占用的ASCII码是从00110000-0011001,前四位都是“0011”。

单纯受压

直接压缩的原理是最容易理解的,因为有时候,文件中不可避免的会有连续的字符,比如在文件末尾加一行“※ ※ ※ ※ ※ ※ ※”。这样压缩的时候只需要记住这个符号和重复的次数,就可以快速还原。

字典压缩

字典压缩是最重要的压缩技术,也是应用最广泛的压缩技术。该技术在文件中搜索重复的字符串,如“中华人民共和国”、“改革开放”,记录后(记录的内容称为“词典”),在文本中用另一个短码替换。想想在Windows系统中填充了多少个字符“Windows”和“Microsoft”,你就会明白为什么这种压缩技术对Windows操作系统如此有效。这种压缩方案特别适用于政治手稿和学术论文。

字典压缩技术对于文本文件和可执行代码文件同样有效,并且可以涵盖“直接压缩”技术。现在流行的压缩软件如ZIP、ARJ、RAR和AIN都采用了这种技术。但是,在这项技术中,合适的字典长度非常重要。字典设置过大或过小都会严重影响压缩效果,压缩速度相对较慢。

大多数压缩软件综合使用了各种压缩技术。

向量压缩

尽管字典压缩功能强大,但它不能对某些文件内容做任何事情,例如:

啊,冰雹,玻璃,长摸,丹锭法

其实这几个看似不成文的汉字有着内在的联系。分别是GB2312中的1601、1702、1803、1904、2005和2106。在这种情况下,可以通过寻找它们之间的数学关系(如级数、方程等)来进行内存压缩。)这种内存压缩称为矢量压缩,是一种新兴的压缩技术。

矢量压缩有时候能给我们带来意想不到的享受。很多人都很惊讶FLASH能在这么小的体积里给我们带来这么多的信息,因为FLASH中使用了矢量压缩技术。用方程记忆一个点的轨迹,比记忆这个点的所有位置要少得多。另一方面,目前的矢量化技术还不能从照片和录音中找到一个高保真、有规律的方案,所以下一步的压缩技术还有施展的空间。

有损压缩和VCD

VCD的出现归功于联合图像专家组(JPEG)的努力。他们提出了一个全新的压缩技术标准,也可以说是一个全新的压缩概念。这个概念催化了MPEG标准的诞生和VCD产业化的实现。JPEG图像压缩技术以图像的每8*8个点的点阵为一个处理单位。在这个范围内,如果全部是某一种颜色,只有少数几种其他颜色,那么其他颜色就会被忽略。理论上,这种压缩技术的压缩比高达64:1。现在一个64MB的文件只需要1MB?这真令人兴奋。为了进一步扩大压缩效果,提高该技术的应用范围,JPEG进行了灵活的调整。允许用户设置处理单元的大小和忽略其他颜色的程度,这也是JPEG图像具有“质量”属性的原因。

JPEG提出的“有损压缩”概念使得这种压缩技术有一定的局限性。比如JPEG不适合压缩工程图、医学图像等素材。但它的实用思想给了人们很大的启发,RealPlayer率先沿着这条道路实现了在线视频的实时播放。而VCD中被剥离了图像的声音也逐渐形成了流行的MP3音乐。(声音压缩的编码方案太复杂,本文不讨论。)

压缩文件间隙

除了这些压缩技术,DOS/Windows系统本身也给大家留下了一个压缩的故事。在DOS/Windows系统下,磁盘存储空间被分割成小块使用,而不是像UNIX或Novell那样在系统的控制下将所有文件混合在一起。这种开放磁盘文件格式虽然不安全(一点都不安全),但是效率高,操作简单。这可能也是DOS/Windows在家用和商用市场击败UNIX和Novell,但在服务器领域却始终不如它们的重要原因。-因为每个分配块只能被一个文件使用,所以即使文件(或者文件的最后一块)只有一个字节,也必须占用一个分配块。因为只剩下两个字节来分配这个存储块(两个字节是16位,这个分配机制叫做FAT16),所以无论分区有多大,最多只能分成2个16 = 65536分配块。例如,2GB分区的分配块大小为32KB;当分区超过2GB时,分配块必须增长到64KB。你想想,如果一个字节文件也占了你64KB,你能不烦吗?因此,从Windows 95 OSR2版本开始,微软推出了FAT32解决方案。但即便如此,“文件鸿沟”依然存在。

为了解决文件间隙,微软在DOS 6.0时代推出了双空间(DBLSPACE),后来又改成了DRVSPACE,在Windows 95/98/ME上依然存在。当时说是可以让硬盘容量翻倍,让大家兴奋不已,但是试了一下就大呼上当了。原来微软只是抄袭了别人,用的是“虚拟卷”技术,最多能保存文件间隙,对于整盘只放一个大文件的用户来说没用。

现在有一种更好的压缩文件间隙的方法,就是用WINZIP把不常用的文件打包成一个包,尤其是大量的小文件和/或在FAT16的环境下,使用这种方法可以为你节省大量的磁盘空间。但无论如何,“文件鸿沟”似乎永远存在于Windows系统中。

压力越大?

文件会越来越大吗?答案是:可以。因为压缩文件需要一个文件头(文件格式,字典等。)控制解压,压缩已经“不堪重负”的文件时,只会增加一个文件头,文件当然会越来越大。另外,虽然压缩后的文件更节省空间,更安全(压缩文件可以加密,普通文本文件不能),但是如果文件头损坏,整个文件就无法解压。所以压缩文件头是非常重要的。这与刚才提到的FAT格式和UNIX/Novell卷格式之间的差异形成了对比。不过如果大家的ZIP文件都损坏了,建议试试DOS版的ZIP解压缩器PKUNZIP,说不定还能保存一部分。

可执行文件的压缩

不仅文档文件和数据文件可以压缩,可执行文件也可以压缩。致力于压缩技术的PKWARE Inc最初推出PKZIP软件(约1990)时,主要有三个程序,分别是PKZIP(用于压缩)、PKUNZIP.EXE(用于解压缩)和PKLITE.EXE(用于压缩可执行文件)。压缩可执行文件的过程很神奇。文件名不会改变,但长度会减少。这样的压缩文件在执行时会在内存中释放自己,然后在执行前会被重新定位和重新加载。因为电脑是瞬间完成的,我几乎感觉不到文件被压缩过。在软盘普及的年代,这个工具非常有用。

现在Windows下的程序越来越大,所以很多程序员压缩自己的主程序,也能起到反盗版的作用。著名的“红色警报”采取了这种方法。随着互联网通讯软件的发展,很多软件被打包成可执行程序,点击后可以自行扩展安装。这些也是可执行文件压缩的例子。

压缩技术的辩证分析

从历史的角度来看,压缩技术注定要灭亡。我们现在来看10之前的DOS时代,当时为了存储目的的压缩工作现在已经淹没在海量存储设备的容量中。从理论上讲,压缩浪费了我们的时间和精力。如果有足够的存储空间,我们没有理由压缩。纵观目前的压缩目的,除了一小部分为了方便检索,大量压缩是为了适应互联网传输速度慢。那么,当网速可以满足我们随时在网络上拖动整个硬盘的内容时,我们还需要压缩吗?当光盘的容量足够大的时候,我们会容忍JPEG技术为我们丢掉一两个色点吗?

但是,哲学指导我们,事物总是在发展的,总是有其他的特征。当容量不再是压缩的目的,传输就成了我们压缩的另一个目的。谁能预测压缩的下一个目的会不会发生,会是什么?(全文结束)