LZ4压缩库1.10.0版本使用指南
概述
LZ4是一种极速的无损压缩算法,单核压缩速度超过500MB/s,并且能够利用多核CPU进行扩展。其解码器速度更是惊人,单核可达数GB/s,在多核系统上通常能达到内存速度的极限。
LZ4压缩库提供了内存压缩和解压缩功能,并给予用户完全的缓冲区控制权。压缩可以通过以下方式完成:
- 单步压缩(简单函数)
- 单步压缩,重用上下文(高级函数)
- 无限制的多步压缩(流式压缩)
核心概念
块与帧的区别
LZ4库处理的是块(Blocks)而非帧(Frames):
- 块:仅包含压缩数据,需要额外的元数据才能解压
- 帧:将块和元数据按照特定方式打包,形成自包含的压缩数据格式
lz4.h
处理块级别的压缩,而帧格式通过lz4frame.h
提供的API实现。
基本功能
简单压缩函数
int LZ4_compress_default(const char* src, char* dst, int srcSize, int dstCapacity);
这个函数将源缓冲区src
中的数据压缩到目标缓冲区dst
中。要确保压缩成功,dstCapacity
应至少为LZ4_compressBound(srcSize)
。
安全解压函数
int LZ4_decompress_safe(const char* src, char* dst, int compressedSize, int dstCapacity);
此函数解压缩数据,提供防止缓冲区溢出的保护。需要提供压缩块的确切大小(compressedSize
)和目标缓冲区容量(dstCapacity
)。
高级功能
压缩边界计算
int LZ4_compressBound(int inputSize);
计算给定输入大小在最坏情况(数据不可压缩)下的最大输出大小,用于内存分配。
可调加速压缩
int LZ4_compress_fast(const char* src, char* dst, int srcSize, int dstCapacity, int acceleration);
允许通过acceleration
参数在速度和压缩率之间进行权衡。值越大速度越快但压缩率越低。
流式压缩
流状态管理
LZ4_stream_t* LZ4_createStream(void);
int LZ4_freeStream(LZ4_stream_t* streamPtr);
void LZ4_resetStream_fast(LZ4_stream_t* streamPtr);
这些函数用于创建、释放和重置流状态,支持连续压缩多个数据块。
字典压缩
int LZ4_loadDict(LZ4_stream_t* streamPtr, const char* dictionary, int dictSize);
加载静态字典可以显著提高小数据块的压缩率。字典在压缩和解压时都必须可用。
内存调优
#define LZ4_MEMORY_USAGE
通过设置这个编译时常量可以调整内存使用量,影响压缩速度和压缩率。默认值14(16KB)适合大多数L1缓存。
特殊模式
独立模式(Freestanding)
#define LZ4_FREESTANDING 1
此模式适用于不支持标准C库的环境,需要用户提供LZ4_memcpy
、LZ4_memset
和LZ4_memmove
的实现。
版本信息
int LZ4_versionNumber(void);
const char* LZ4_versionString(void);
这两个函数分别返回库的版本号和版本字符串,用于版本检查。
最佳实践
- 对于简单场景,使用
LZ4_compress_default
和LZ4_decompress_safe
组合 - 需要更高性能时,考虑使用
LZ4_compress_fast
并调整加速参数 - 处理多个相关数据块时,使用流式API以获得更好的压缩率
- 压缩小数据时,加载合适的字典可以显著提高压缩率
- 在资源受限环境中,考虑调整
LZ4_MEMORY_USAGE
或使用独立模式
LZ4库以其卓越的速度和合理的压缩率,成为许多实时系统和性能敏感应用的理想选择。通过合理使用其提供的各种功能,可以在不同场景下获得最佳的性能表现。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考