CppUtils/zlib_cpp/README.md

203 lines
5.0 KiB
Markdown
Raw Normal View History

2025-06-05 10:06:43 +08:00
# ZlibCpp - zlib C++面向对象封装库
## 概述
ZlibCpp是对经典zlib压缩库的C++面向对象封装提供了现代C++风格的API支持多种数据格式和压缩策略。
## 特性
- 🔧 **面向对象设计**: 使用现代C++设计模式
- 📦 **多格式支持**: 支持Zlib、Gzip、Raw Deflate格式
- 🚀 **高性能**: 基于原始zlib库保持高效性能
- 🛡️ **异常安全**: 完整的异常处理机制
- 📝 **易于使用**: 提供简单的静态方法和流式API
- 🔍 **丰富的工具**: 包含校验和计算、格式检测等工具
## 核心类结构
### ZlibException 异常类层次
```cpp
ZlibException (基类)
├── ZlibMemoryException (内存错误)
├── ZlibDataException (数据错误)
├── ZlibStreamException (流错误)
├── ZlibBufferException (缓冲区错误)
└── ZlibVersionException (版本错误)
```
### 主要类
- **ZlibBase**: 基础抽象类
- **ZlibCompressor**: 压缩器类
- **ZlibDecompressor**: 解压缩器类
- **ZlibUtils**: 工具类,提供便捷的静态方法
## 快速开始
### 包含头文件
```cpp
#include "ZlibCpp.h"
using namespace ZlibCpp;
```
### 基本用法
#### 1. 简单压缩/解压缩
```cpp
// 压缩字符串
std::string data = "Hello, World!";
auto compressed = ZlibUtils::Compress(data);
// 解压缩
std::string decompressed = ZlibUtils::DecompressToString(compressed);
```
#### 2. 指定压缩级别和格式
```cpp
auto compressed = ZlibUtils::Compress(data,
CompressionLevel::BestCompression,
DataFormat::Gzip);
```
#### 3. 流式压缩
```cpp
ZlibCompressor compressor(CompressionLevel::DefaultCompression, DataFormat::Zlib);
// 分块压缩
auto chunk1 = compressor.Compress(data1);
auto chunk2 = compressor.Compress(data2);
auto final = compressor.Finish();
// 合并结果
std::vector<uint8_t> result;
result.insert(result.end(), chunk1.begin(), chunk1.end());
result.insert(result.end(), chunk2.begin(), chunk2.end());
result.insert(result.end(), final.begin(), final.end());
```
### 压缩级别
```cpp
enum class CompressionLevel {
NoCompression = 0, // 不压缩
BestSpeed = 1, // 最快速度
BestCompression = 9, // 最佳压缩
DefaultCompression = -1 // 默认压缩
};
```
### 数据格式
```cpp
enum class DataFormat {
Zlib = 0, // 标准zlib格式 (RFC 1950)
Gzip = 16, // Gzip格式 (RFC 1952)
Raw = -1 // 原始deflate格式 (RFC 1951)
};
```
## 高级用法
### 文件压缩
```cpp
// 压缩文件
bool success = ZlibUtils::CompressFile("input.txt", "output.zlib",
CompressionLevel::BestCompression);
// 解压缩文件
bool success = ZlibUtils::DecompressFile("output.zlib", "restored.txt");
```
### 校验和计算
```cpp
std::vector<uint8_t> data = {0x12, 0x34, 0x56, 0x78};
uint32_t adler32 = ZlibUtils::CalculateAdler32(data);
uint32_t crc32 = ZlibUtils::CalculateCRC32(data);
```
### 格式检测
```cpp
auto format = ZlibUtils::DetectFormat(compressed_data);
switch (format) {
case DataFormat::Zlib:
std::cout << "Zlib格式" << std::endl;
break;
case DataFormat::Gzip:
std::cout << "Gzip格式" << std::endl;
break;
case DataFormat::Raw:
std::cout << "Raw deflate格式" << std::endl;
break;
}
```
### 编码工具
```cpp
// Base64编码
std::string base64 = ZlibUtils::Base64Encode(data);
auto decoded = ZlibUtils::Base64Decode(base64);
// 十六进制编码
std::string hex = ZlibUtils::HexEncode(data);
auto hex_decoded = ZlibUtils::HexDecode(hex);
```
## 异常处理
```cpp
try {
auto compressed = ZlibUtils::Compress(data);
auto decompressed = ZlibUtils::DecompressToString(compressed);
}
catch (const ZlibMemoryException& e) {
std::cout << "内存不足: " << e.what() << std::endl;
}
catch (const ZlibDataException& e) {
std::cout << "数据错误: " << e.what() << std::endl;
}
catch (const ZlibException& e) {
std::cout << "zlib错误: " << e.what() << std::endl;
}
```
## 性能特点
- **高效内存管理**: 使用内存池减少内存分配开销
- **流式处理**: 支持大文件的流式压缩,避免内存溢出
- **缓冲区优化**: 使用8KB缓冲区平衡内存使用和性能
- **异常安全**: RAII设计确保资源正确释放
## 构建要求
- C++11或更高版本
- Visual Studio 2017或更新版本 (Windows)
- 或支持C++11的GCC/Clang (Linux/macOS)
## 版本信息
```cpp
std::cout << "库版本: " << ZlibCpp::GetLibraryVersion() << std::endl;
std::cout << "zlib版本: " << ZlibCpp::GetZlibVersion() << std::endl;
```
## 示例程序
运行`main.cpp`中的测试程序可以看到完整的功能演示:
```bash
# 编译并运行
# Visual Studio: 直接构建项目
# 或使用命令行编译所有源文件
```
## 许可证
本项目基于zlib许可证与原始zlib库保持一致。
## 贡献
欢迎提交Issue和Pull Request来改进这个库。
---
**注意**: 这个库是对原始zlib的封装保持了zlib的所有性能特性同时提供了更友好的C++接口。