#include <QtZlib/zlib.h>
QByteArray qGzipUncompress(const QByteArray& data)
{
if (!data.data()) {
qWarning("qGzipUncompress: Data is null");
return QByteArray();
} //初始化流结构体
z_stream unGzipStream;
unGzipStream.next_in = (z_Bytef*)data.data();//输入字节起始地址
unGzipStream.avail_in = data.size();//输入字节大小
unGzipStream.zalloc = Z_NULL;
unGzipStream.zfree = Z_NULL;
unGzipStream.opaque = Z_NULL;
//初始化内部流状态
int ret = inflateInit2(&unGzipStream,16);
if(ret != Z_OK)
{
qWarning("qGzipUncompress: The call to inflateInit2 returns the wrong value");
return QByteArray();
} unsigned char buffer[4096];
QByteArray gzipUnomprData;
//使用 4MB 的缓冲区循环去接收数据,并把获取到的数据追加给 unComprData,直到获取的数据为空
do
{
unGzipStream.avail_out = 4096;//接收解压数据缓冲区大小
unGzipStream.next_out = buffer;//接收解压数据缓冲区起始地址
memset(buffer,0,4096);
//解压数据
ret = inflate(&unGzipStream,Z_NO_FLUSH);
switch(ret)
{
case Z_MEM_ERROR:
qWarning("qGzipUncompress: Z_DATA_ERROR: Not enough memory");
return QByteArray();
case Z_NEED_DICT:
ret = Z_DATA_ERROR;
case Z_DATA_ERROR:
qWarning("qGzipUncompress: Z_DATA_ERROR: Input data is corrupted");
return QByteArray();
}
if(ret != Z_FINISH)
{
gzipUnomprData.append((char*)buffer);
}
}while(unGzipStream.avail_out == 0);
return gzipUnomprData;
}

根据实际需求 临时接收缓冲区大小

wss 协议传送过来的数据是经过 gzip 压缩过的,如何使用 qt 解压该数据呢?的更多相关文章

  1. 【原创】Hadoop的IO模型(数据序列化,文件压缩)

    数据序列化 我们知道,数据在分布式系统上运行程序数据是需要在机器之间通过网络传输的,这些数据必须被编码成一个个的字节才可以进行传输,这个其实就是我们所谓的数据序列化.数据中心中,最稀缺的资源就是网络带 ...

  2. GZipStream 压缩与解压数据

    简介:此类表示 GZip 数据格式,它使用无损压缩和解压缩文件的行业标准算法.这种格式包括一个检测数据损坏的循环冗余校验值.GZip 数据格式使用的算法与 DeflateStream 类的算法相同,但 ...

  3. 使用Gzip压缩数据,加快页面访问速度

                 在返回的json数据量大时,启用Gzip压缩,可以提高传输效率.下面为Gzip压缩对json字符串压缩并输出到页面的代码. 一.代码 /** 向浏览器输出字符串响应数据,启用 ...

  4. WebSocket 结合 Nginx 实现域名及 WSS 协议访问

    简单了解一下 WebSocket 现在,很多网站为了实现推送技术,所用的技术都是轮询.轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器 ...

  5. 微信小程序配置WSS协议

    配置的是nginx转发,前提是你已经安装了nginx的软件并已经正常打开网页,安装好SSL协议,能打开https网页 下面是配置: 需要的话可以根据需求修改 server { listen 80; s ...

  6. WebSocket 结合 Nginx 实现域名及 WSS 协议访问-Nginx配置

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  7. iOS开发中的4种数据持久化方式【一、属性列表与归档解档】

    iOS中的永久存储,也就是在关机重新启动设备,或者关闭应用时,不会丢失数据.在实际开发应用时,往往需要持久存储数据的,这样用户才能在对应用进行操作后,再次启动能看到自己更改的结果与痕迹.ios开发中, ...

  8. 详解 Qt 线程间共享数据(用信号槽方式)

    使用共享内存.即使用一个两个线程都能够共享的变量(如全局变量),这样两个线程都能够访问和修改该变量,从而达到共享数据的目的. Qt 线程间共享数据是本文介绍的内容,多的不说,先来啃内容.Qt线程间共享 ...

  9. 详解 Qt 线程间共享数据(使用signal/slot传递数据,线程间传递信号会立刻返回,但也可通过connect改变)

    使用共享内存.即使用一个两个线程都能够共享的变量(如全局变量),这样两个线程都能够访问和修改该变量,从而达到共享数据的目的. Qt 线程间共享数据是本文介绍的内容,多的不说,先来啃内容.Qt线程间共享 ...

随机推荐

  1. python3 第八章 - 完善九九乘法表

    前面我们在第四章的时候挖了个坑:怎么用优雅的方式来打印九九乘法表.这一章我们就来填上这个坑. 首先,我们再来看下九九乘法表是什么样子的 1 x 1 = 1 1 x 2 = 2 2 x 2 = 4 1 ...

  2. python_15_内置函数

    有哪些内置函数? -- all()                              - 可迭代对象,全为真返回真 -- any()                            - ...

  3. android软键盘的显示和隐藏

    显示: InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); imm.toggle ...

  4. 小白的Python之路 day5 re正则模块

    re正则模块 一.概述 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,要讲他的具体用法要讲一本书!它内嵌在Python中,并通过 re 模块实现.你可以为想要匹配的相应字符串 ...

  5. 提取位于<title>...</title>内的文本标题内容

    #vim title.txt <title>nhlinkin</title> # cat title.txt  | sed 's:.*<title>\([^< ...

  6. Java基础知识(一)

    类与对象 1.对象:客观存在的一切事物称之为对象 类:具有相同属性和方法的对象的集合 2.类:属性,方法 3.修饰符: public protected  默认(不写)  private 任何地方   ...

  7. bzoj 1930: [Shoi2003]pacman 吃豆豆 [费用流]

    1930: [Shoi2003]pacman 吃豆豆 题意:两个PACMAN吃豆豆.一开始的时候,PACMAN都在坐标原点的左下方,豆豆都在右上方.PACMAN走到豆豆处就会吃掉它.PACMAN行走的 ...

  8. Markdown 安装图解(破解汉化教程)

    http://blog.csdn.net/taokai_110/article/details/72934818 终于解决了问题

  9. qt程序启动画面

  10. this 指针

    #include<iostream> using namespace std; class A { private: int a; int b; public: A(int a,int b ...