zoukankan      html  css  js  c++  java
  • wss 协议传送过来的数据是经过 gzip 压缩过的,如何使用 qt 解压该数据呢?

    #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;
    }
    

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

  • 相关阅读:
    smarty中ifelse、foreach以及获取数组中键值名的一个实例
    smarty逻辑运算符
    python strip()函数 介绍
    (转)论python工厂函数与内建函数
    数据结构哈希表(转)
    哈希表算法的编写
    哈希表(转)
    平衡二叉树的旋转操作
    并查集详解(转)
    Java数组技巧攻略
  • 原文地址:https://www.cnblogs.com/cheungxiongwei/p/8465225.html
Copyright © 2011-2022 走看看