在纸质书里TOC是印刷出来的一张表,而在电子文件里则是由结构化数据构成的一张表,它的目的同样是为了快速定位:如果想找文件中的某一内容,可以先查TOC,知道感兴趣的内容在文件的什么位置,直接跳过去就行了。Z常见的运用就是AVI、RM等多媒体文件:播放的时候经常有人在播放条上点来点去跳着看(即“随机访问”),如果没有TOC,在长达几百兆的文件里来回定位会慢死。 具体到ZIP文件里,TOC是放在文件尾部的一张表,里面列出了ZIP包中每一个文件的属性(文件名、长度等)和在ZIP包中的存放位置。如果需要随机访问ZIP包中的某一个文件,只需在TOC里找到这个文件的存放位置,直接跳过去即可。 而RAR文件里则没有TOC,在文件头之后所有文件按顺序连续存放。 这种差异造成的结果就是:随机访问时ZIP比RAR快,而顺序访问时RAR比ZIP快。 所谓随机访问,就是前面说过的随机访问压缩包中某个指定的文件。举一个简单的例子:一本反编译或下载到的网页电子书,有大量HTML、图像、CSS、JS,然后打成压缩包。现在要求在不解包的情况下访问其中的页面:可以想象,打开每个HTML页面的时候,它所附带的图像、CSS、JS等文件可能随机分布在整个压缩包里,如果没有TOC,查找每个文件的时候都要从头开始找,将会有多慢。 所以各位可以理解为什么JAR包就是标准ZIP包,而 也只用ZIP格式保存反编译出来的电子书、漫画、PDG书等一切可能需要随机访问的东西。 所谓顺序访问,就是将整个压缩包从头解到尾。在这方面RAR具有天然的优势。而且为了节省WINRAR列文件的时间,对于单个RAR 一般都直接通过右键菜单解压缩,很少双击压缩包打开再解压。 由于RAR的原作者已经去世,造成这种差异的确切原因 相信已不可考,但 个人猜测可能与DOS时代的备份软件之争有关:在DOS时代,电脑硬盘不像现在这样,20MB就算很大了。这样的容量用两盒软盘 即可备份,备份成本相对数据本身的价值来说非常低廉。因此在DOS时代,很多公司和机构都制定有定期硬盘备份政策,以免因为人为或非人为的因素 (早期硬盘可没有如今可靠)而造成不可挽回的数据损失。在备份软件方面,虽然微软已经随DOS提供了BACKUPRESTORE工具,但是他们基本不具备数据压缩能力,因此在压缩软件中提供备份功能,就成为DOS时代的一个时尚。由于DOS时代的备份介质多为软盘,因此压缩 软件的备份功能其实就转化成如今很常见的一个功能:分卷压缩功能,即按照软盘容量进行分卷压缩,然后将分卷压缩文件备份(BACKUP)到软盘,需要的时候再解压,或恢复(RESTORE)到硬盘。 DOS时代Z有名的ZIP工具是PKZIP,出现得比DOS版的RAR早。在分卷压缩时,PKZIP按照ZIP文件规范,将TOC存放在Z后,即存储在Z后一卷,由此带来如下问题: 1、恢复时,每解压一张盘,都要先将Z后一张盘插进去一次,读一次TOC。 2、只要Z后一张盘上的TOC坏了,就算其它盘都是好的,也不能正常解压。 这两个缺点,尤其是diyi个缺点实在是太臭名昭著了,因此当时出现了非常强烈的改革呼声。在这个关键时刻,DOS版的RAR出现了:不仅压缩率比PKZIP高(这点在DOS时代非常重要,毕竟软盘又贵容量又小),而且由于吸取了当时对ZIP格式的批评,取消了TOC,因此: 1、在恢复分卷压缩的备份文件时,不需要频繁插入带有TOC的分卷,按顺序换盘即可。 2、即使某个分卷损坏,也可以跳过,从完好的分卷再开始解压。 由于这些原因(当然还有其它原因),RAR推出后迅速取得了成功,PKZIP在DOS时代就开始流失用户,到WINDOWS时代基本消声匿迹。在WINDOWS时代推出的WINZIP,则彻底放弃了分卷压缩功能(ZIP格式永远的痛?)。