C++-如何用zlib压缩内存数据?
前几天在做一个web服务器和客户端文件上传的功能时,需要实现客户端能用gz压缩上传的文件,对web服务器gz压缩后的内容,客户端也需要解压缩。在开发的时候使用了zlib,但是压缩和解压缩使用的zlib的接口是操作文件的。测试时发现文件操作导致客户端速度很慢,因此需要在内存中进行压缩和解压缩。需要满足的条件是能够让web服务器(我们现在用的是ngix)识别出来进行解压缩处理
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
建议看看zlib的说明文档,看看例子就明白了,我也有大量用到,zlib比较好,不过并不是最快的,lzo速度比较快,也可以参考,不过做网站应用的话zlib锁压缩出来的gz格式比较好。
#include <stdio.h>
#include "zlib.h"
int main()
{
//原始数据
const unsigned char strSrc[]="hello world!n
aaaaa bbbbb ccccc ddddd aaaaa bbbbb ccccc ddddd中文测试 中文测试
aaaaa bbbbb ccccc ddddd aaaaa bbbbb ccccc ddddd中文测试 中文测试
aaaaa bbbbb ccccc ddddd aaaaa bbbbb ccccc ddddd中文测试 中文测试
aaaaa bbbbb ccccc ddddd aaaaa bbbbb ccccc ddddd中文测试 中文测试";
unsigned char buf[1024]={0},strDst[1024]={0};
unsigned long srcLen=sizeof(strSrc),bufLen=sizeof(buf),dstLen=sizeof(strDst);
printf("Src string:%snLength:%dn",strSrc,srcLen);
//压缩
compress(buf,&bufLen,strSrc,srcLen);
printf("nAfter Compressed Length:%dn",bufLen);
printf("Compressed String:%sn",buf);
//解压缩
uncompress(strDst,&dstLen,buf,bufLen);
printf("nAfter UnCompressed Length:%dn",dstLen);
printf("UnCompressed String:%sn",strDst);
return 0;
}