/pzip

高效并发的 ZIP 文件压缩与解压工具,兼容 PKZIP 2.04g 版本。

Primary LanguageGoApache License 2.0Apache-2.0

pzip

高效并发的 ZIP 文件压缩与解压工具,兼容 PKZIP 2.04g 版本。

参考文档:PKWARE APPNOTE

特性

  • 多协程支持:快速并行处理 ZIP 文件的压缩与解压
  • ZIP64 支持:处理大于 4GB 的文件及超大档案
  • 兼容 PKZIP 2.04g 版本:确保与传统 ZIP 工具的兼容性
  • 支持原生参数:兼容 zipunzip 的常用命令行参数,易于集成到现有工作流中

使用

下载二进制

下载地址

使用 GO 安装

go install github.com/zdz1715/pzip/cmd/pzip@latest
go install github.com/zdz1715/pzip/cmd/punzip@latest

从源码构建

git clone https://github.com/zdz1715/pzip.git

cd pzip

make release-snapshot

二进制包会生成在 dist 目录下。

测试

  • 操作系统:Ubuntu 20.04
  • CPU:Intel(R) Xeon(R) Gold 6254 CPU @ 3.10GHz(16核)
  • 内存:16GB
  • 测试文件大小:23GB

SSD硬盘

压缩

使用原生zip命令:

$ time zip -r -q test-zip.zip bigdata-dir

real    14m7.312s
user    13m34.856s
sys     0m21.796s

使用pzip命令:

$ time pzip -r -q test-pzip.zip bigdata-dir

real    1m30.363s
user    3m42.956s
sys     1m10.184s

压缩效率大约提升了9.4倍,节省了89.6%时间。

解压

使用原生unzip命令:

$ time unzip -q test-zip.zip

real    2m26.580s
user    2m10.276s
sys     0m14.364s

使用punzip命令:

$ time punzip -q test-pzip.zip

real    0m28.078s
user    1m38.200s
sys     0m16.384s

解压效率大约提升了3.22倍,节省了68.9%时间。

机械硬盘

压缩

使用原生zip命令:

$ time zip -r -q test-zip.zip bigdata-dir

real    21m46.643s
user    18m25.877s
sys     1m56.902s

使用pzip命令:

$ time pzip -r -q test-pzip.zip bigdata-dir

real    6m30.449s
user    10m17.789s
sys     11m14.409s

压缩效率大约提升了3.5倍,节省了71.43%时间。

解压

使用原生unzip命令:

$ time unzip -q test-zip.zip

real    5m55.984s
user    3m36.254s
sys     1m45.136s

使用punzip命令:

$ time punzip -q test-pzip.zip

real    3m37.963s
user    4m51.073s
sys     7m9.020s

解压效率大约提升了1.64倍,节省了38.8%时间。

解决的问题:

archive/zip: zip64 extra headers problems

相关 issue:

java.util.zip: only DEFLATED entries can have EXT descriptor

相关 issue: