zlib使用过程
compress 压缩过程:deflateInit() ->deflate() ->deflateEnd(); uncompress 对应的解压过程 inflateInit() -> inflate() -> inflateEnd();
compress2 压缩过程:deflateInit2() ->deflate() ->deflateEnd(); 对应的解压过程 inflateInit2() -> inflate() -> inflateEnd();
zlib
关键的函数
(1)int compress (Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen);
把源缓冲压缩成目的缓冲
(2) int compress2 (Bytef *dest, uLongf *destLen,const Bytef *source, uLong sourceLen,int level);
功能和上一个函数一样,都一个参数可以指定压缩质量和压缩数度之间的关系(0-9)不敢肯定这个参数的话不用太在意它,明白一个道理就好了: 要想得到高的压缩比就要多花时间
(3) uLong compressBound (uLong sourceLen);
计算需要的缓冲区长度. 假设你在压缩之前就想知道你的产度为 sourcelen 的数据压缩后有多大, 可调用这个函数计算一下,这个函数并不能得到精确的结果,但是它可以保证实际输出长度肯定小于它计算出来的长度
(4) int uncompress (Bytef *dest, uLongf *destLen,const Bytef *source, uLong sourceLen);
解压缩(看名字就知道了:)
9、文件概览
alder32.c:计算数据流的Alder-32校验和,实现alder32()。
crc32.h和crc32.c:计算数据流的CRC-32,实现crc32()。
deflate.h和deflate.c:使用默认算法压缩数据,实现deflate函数簇。
inflate.h和inflate.c:zlib的解压,实现inflate函数簇。
compress.c:实现内存缓冲区的压缩,包括compress(), compress2(), compressBound()。
uncompr.c:实现内存缓冲区的解压,包括uncompress()。
gzguts.h和gzlib.c:读写gzip文件的通用实现,包括gzopen(), gzdopen(), gzbuffer(), gzrewind(), gzseek(), gztell(), gzoffset(), gzeof(), gzerror(), gzclearerr()。
gzclose.c:实现gzclose()。
gzread.c:读取gzip文件的实现,包括gzread(), gzgetc(), gzungetc(), gzgets(), gzdirect(), gzclose_r()。
gzwrite.c:写gzip文件的实现,包括gzwrite(), gzputc(), gzputs(), gzprintf(), gzflush(), gzsetparams(), gzclose_w()。
infback.c:使用回调接口实现解压,包括inflateBackInit(), inflateBack(), inflateBackEnd()。
zutil.h和zutil.c:zlib库用到的工具函数。包括zlibVersion(), zlibCompileFlags(), zError()。
zlib.h:zlib库导出的接口描述文件,应用程序使用zlib库时需要本文件。
zconf.h:zlib库的编译配置文件,如果编译时需要给所有库函数加上唯一的前缀,或者需要针对不同平台作特殊编译,需要用到本文件。还包括标准 C/C++兼容性定义;编译成DLL时是否使用WINAPI/WINAPIV调用方式;类型定义Byte,uInt, uLong, voidpf等。
inftrees.h和inftrees.c:为有效的解码生成Huffman树。
trees.h和trees.c:使用Huffman编码输出压缩的数据。
inffixed.h:使用固定编码压缩。
inffast.h和inffast.c:快速解压数据。