zlib提供了压缩和解压缩操作
压缩函数:
int compress(Bytef *dest,uLongf *destLen,const Bytef *source,uLong sourcelen);
1.compress 函数将source 缓冲区中的内容压缩到dest缓冲区。
2.sourcelen表示缓冲区大小(以字节为单位)
3.注意函数的第二个参数destLen是传址调用,
4.当调用函数时,destLen表示dest缓冲区的大小,destLen>(sourceLen+12)*100.1%。
5.当函数退出后,destLen表示压缩后缓冲区的实际大小。此时destLen/sourceLen正好就是压缩率。
6.compress成功的话,则返回Z_OK;若没有足够内存,则返回Z_MEM_ERROR;若输出缓冲区不够大,则返回Z_BUF_ERROR.
解压缩函数
int uncompress(Bytef *dest,uLongf *destLen,const Bytef *source,uLong sourceLen);
1.将source缓冲区的内容解压缩到dest缓冲区。
2.sourceLen是source缓冲区的大小(以字节为单位)。
3.注意函数的第二个参数destLen是传址调用。
4.destLen表示dest缓冲区的大小,dest缓冲区要足以容纳下解压后的数据。
5.在进行解压缩时,需要提前知道被压缩的数据,解压出来会有多大。这就要求在进行压缩前,保存原始数据的大小(也就是解压后的数据的大小)。当函数退出后,destLen是解压出来的数据的实际的大小。
6.uncompress若成功,则返回Z_OK,
若没有足够内存,则返回Z_MEM_ERROR
若输出缓冲区不够大,则返回Z_BUF_ERROR
若输入数据有误,则返回Z_DATA_ERROR.
目前测试发现对以上两个函数来说,只要destLen进入函数之前足够大,函数结束时返回的destLen就是真实长度,这种说法不知是否严谨,望大家纠正我。感谢