高性能并行 ZIP 压缩工具,C++ 实现。
pzip-cpp 是 Go 语言 pzip 的 C++ 移植版本,针对大量小文件的压缩场景进行了优化。
- 🚀 高性能:多线程并行压缩,接近官方 Go 版性能
- 📦 标准兼容:生成标准 ZIP 格式,支持 ZIP64
- 🔧 易于集成:可作为库集成到其他项目
- 💻 跨平台:支持 Linux(ARM/x86)
在 ARM 平台压缩 2.5GB 碎文件:
| 工具 | 耗时 |
|---|---|
| pzip-cpp | 3.9s |
| pzip (Go) | 2.7s |
| zip (单线程) | ~60s |
- CMake 3.14+
- C++17 编译器
- zlib
mkdir build && cd build
cmake ..
make -j$(nproc)# 压缩文件或目录
./pzip output.zip /path/to/files
# 静默模式
./pzip -q output.zip /path/to/files
# 解压
./punzip input.zip [output_dir]#include <pzip/archiver.hpp>
// 压缩
pzip::ArchiverOptions options;
options.concurrency = 8; // 并发数
options.compressionLevel = 1; // 压缩级别 (1=最快, 9=最高压缩率)
pzip::Archiver archiver("output.zip", options);
pzip::Error err = archiver.archive({"/path/to/dir"});
if (err) {
std::cerr << "Error: " << err.message() << std::endl;
}
archiver.close();#include <pzip/extractor.hpp>
// 解压
pzip::ExtractorOptions options;
options.concurrency = 8;
pzip::Extractor extractor("input.zip", options);
pzip::Error err = extractor.extract("/output/dir");
if (err) {
std::cerr << "Error: " << err.message() << std::endl;
}┌─────────────────────────────────────────────┐
│ Archiver │
│ ┌───────────────┐ ┌──────────────────┐ │
│ │ ProcessPool │───>│ WriterPool │ │
│ │ (并行压缩) │ │ (顺序写入ZIP) │ │
│ └───────────────┘ └──────────────────┘ │
└─────────────────────────────────────────────┘
- FileProcessPool:多线程并行读取和压缩文件
- FileWriterPool:单线程顺序写入 ZIP(ZIP 格式要求)
- FastDeflate:高性能 DEFLATE 压缩器,参考 klauspost/compress
详细设计文档见 docs/DESIGN.md
MIT License
- pzip - 原版 Go 实现
- klauspost/compress - 高性能压缩算法参考