一些关于压缩的闲聊
很多年前就关注过PeaZip这款用free pascal开发的压缩软件了,可以说是free pascal最有代表性的实用产品,没有之一。PeaZip在格式支持广度、安全性、跨平台上非常优秀,但是有个缺陷导致一直没重度使用。PeaZip 在解压包含上万个文件的 .tar.gz(或 .tgz)归档时会非常慢,达到分钟级,而其它软件通常只是秒级。因为日常开发经常接触的都是tar文件,所以这个缺点影响非常严重不得不弃为备用。
今天又详细了解了下,算是有点眉目了。为什么 PeaZip 解压大数量文件的 tar.gz 很慢,这是因为tar是“无索引”的线性归档格式,其文件本质是一个连续拼接的文件流,没有中央目录(不像 ZIP/7z)。要列出或提取第 10000 个文件,必须从头扫描到该位置。而PeaZip的 GUI 设计逻辑是:先完整解析归档内容 → 显示文件列表 → 用户选择 → 执行解压,这就必然需要全量解析,这个预解析过程非常耗时。而7-Zip这类软件的 GUI 更接近“命令行思维”,因此解压tar也更快。
PeaZip的模块化设计优点就是支持的格式特别的,缺点就是带来性能损失。
tar的优势在于可完整保留 Unix/Linux 文件系统语义(比如文件权限和所有者、符号链接)等,而且顺序流格式更适合管道(Pipeline)和流处理,比如可以直接跟ssh命令配合,因此几乎可以说是为Linux而生的归档格式。如果是经常使用文件预览和压缩文件提取这种场景,无疑zip格式更优秀。
另外,就是很多人搞不清tar.gz和tar的区别,搞不清归档和压缩的区别。归档是将多个文件/目录打包成一个单一文件,保留元数据,目的是为了方便传输和存储,最常见的tar/iso/cpio/img这些都是归档,然后为了缩小体积,也可选搭配压缩。前面说到Linux有tar这种关注元数据的归档,Windows上也有对应的wim归档。
早些年的Linux上还预留一个叫freeArc的压缩软件,ARC格式可谓是最早的压缩格式之一,现在最流行的zip格式就是基于ARC格式逆向破解而来的,由于ARC不够开放,90年代中期就被淘汰了。
目前主流的文件压缩格式就是zip/7z/rar/zst了,zip通用,7z压缩率高,rar文件损坏修复强,zst更平衡。
很多年前就关注过PeaZip这款用free pascal开发的压缩软件了,可以说是free pascal最有代表性的实用产品,没有之一。PeaZip在格式支持广度、安全性、跨平台上非常优秀,但是有个缺陷导致一直没重度使用。PeaZip 在解压包含上万个文件的 .tar.gz(或 .tgz)归档时会非常慢,达到分钟级,而其它软件通常只是秒级。因为日常开发经常接触的都是tar文件,所以这个缺点影响非常严重不得不弃为备用。
今天又详细了解了下,算是有点眉目了。为什么 PeaZip 解压大数量文件的 tar.gz 很慢,这是因为tar是“无索引”的线性归档格式,其文件本质是一个连续拼接的文件流,没有中央目录(不像 ZIP/7z)。要列出或提取第 10000 个文件,必须从头扫描到该位置。而PeaZip的 GUI 设计逻辑是:先完整解析归档内容 → 显示文件列表 → 用户选择 → 执行解压,这就必然需要全量解析,这个预解析过程非常耗时。而7-Zip这类软件的 GUI 更接近“命令行思维”,因此解压tar也更快。
PeaZip的模块化设计优点就是支持的格式特别的,缺点就是带来性能损失。
tar的优势在于可完整保留 Unix/Linux 文件系统语义(比如文件权限和所有者、符号链接)等,而且顺序流格式更适合管道(Pipeline)和流处理,比如可以直接跟ssh命令配合,因此几乎可以说是为Linux而生的归档格式。如果是经常使用文件预览和压缩文件提取这种场景,无疑zip格式更优秀。
另外,就是很多人搞不清tar.gz和tar的区别,搞不清归档和压缩的区别。归档是将多个文件/目录打包成一个单一文件,保留元数据,目的是为了方便传输和存储,最常见的tar/iso/cpio/img这些都是归档,然后为了缩小体积,也可选搭配压缩。前面说到Linux有tar这种关注元数据的归档,Windows上也有对应的wim归档。
早些年的Linux上还预留一个叫freeArc的压缩软件,ARC格式可谓是最早的压缩格式之一,现在最流行的zip格式就是基于ARC格式逆向破解而来的,由于ARC不够开放,90年代中期就被淘汰了。
目前主流的文件压缩格式就是zip/7z/rar/zst了,zip通用,7z压缩率高,rar文件损坏修复强,zst更平衡。