在 Adobe 的 AIR 1.5 帮助文档里发现了一篇高质量的教程:ByteArray 示例:读取 .zip 文件。于是心血来潮,细读了 zip 文件格式说明书并汉化了部分内容。用 AS3 读取 zip 文件,已经不是新鲜事了,有很多AS3开源类库都实现此功能了,例如:zipLib、ZipArchive。二者有异曲同工之妙,但也有区别。前者不支持中文,二者算法也有不同,但从我角度看算法都可以进一步优化,例如查找结尾签名时可以采用冒泡的方式。还有一点,他们都欠缺对加密、分卷方面的功能。 了解了 zip 文件格式后,学到不少东西。例如文件最后修改时间是采用 DOS 时间表示方法,它是一个4字节(32位)的二进制数,高7位表示年;第25到22位表示月;第21到17 位表示日;第16到12位表示时;第11到6位分;低5位左移一位后表示秒。
目前最新的 zip 文件格式说明书是在2007年发布的,英文版,难以捉摸的专有名词很令人头痛。在google上搜索的中文版是2002年的版本,而且内容不全。于是自己就忍痛了一下,翻译了一部分够用的内容:.zip 文件格式说明书。zip 采用的压缩算法有很多种,常用的是 DEFLATE 算法,也是flash内置支持的。目前我已经实现解压功能,但不完美。如果压缩算法不是采用 DEFLATE,那就完蛋了。接下来希望能把压缩功能完成。有精力的话,还想研究加密、分卷、Zip64等等。希望搞个完整的类库,以后就可以在线解压和压缩文件了。 附:auzn 做的文件分割混排AIR程序:点此进入。
