zoukankan      html  css  js  c++  java
  • web服务交互中HTTP数据内容GZIP,ZLIB格式压缩与解压缩封装(共享)

    点击下载独立的dll

    //dll内部封装API格式

    //gzip
    BOOL  fnZlibDecompressPacket
    (__IN_PARAM unsigned char* gZlibDataBuffer,
     __IN_PARAM size_t gZLibDataLength,
    __OUT_PARAM char* pChDataBuffer,
    __OUT_PARAM DWORD *pdwLength);
    
    BOOL  fnZlibCompressPacket
    (__IN_PARAM unsigned char* gZlibDataBuffer, 
    __IN_PARAM size_t gZLibDataLength,
    __OUT_PARAM char * pchGzipOutData,
    __OUT_PARAM DWORD *pdwLength);
    
    //zlib
    
    BOOL fnGzipDecompressPacket
    (__IN_PARAM unsigned char* gzipDataBuffer,
    __IN_PARAM size_t gzipDataBuffer_Length,
     __OUT_PARAM char* pChDataBuffer,
    __OUT_PARAM DWORD *pdwLength);
    
    BOOL fnGzipCompressPacket
    (__IN_PARAM const char * gzipDataBuffer,
    __IN_PARAM int gzipDataBuffer_Length,
    __OUT_PARAM char * dstDataBuffer, 
    __OUT_PARAM int *pdwLength);


    //GZIP调用核心代码演示


    typedef  BOOL   (*UncompressionGzipPacketToBuffer)
    (unsigned char* gZipDataBuffer,  size_t gZipDataLength, char * pDataBuffer,DWORD *dwLength);
    
    typedef  BOOL   (*CompressionBufferPacketToGzip)
    ( unsigned char* chDataBuffer,  size_t chDataLength, char* pGzipBuffer,DWORD *dwLength);
    
    
    HINSTANCE hInst=NULL;
        
    UncompressionGzipPacketToBuffer UngzipPacket;
        
    CompressionBufferPacketToGzip   ComGzipBuffer;
        
    hInst=LoadLibrary(_T("GzipZlibdll.dll"));
        
    if (hInst==NULL)
    {
        return -1;
    } 
    UngzipPacket=(UncompressionGzipPacketToBuffer)GetProcAddress(hInst,"fnGzipDecompressPacket");
    
    ComGzipBuffer=(CompressionBufferPacketToGzip)GetProcAddress(hInst,"fnGzipCompressPacket");   
    
    if (UngzipPacket==NULL)    
    {
            return -1; 
    } 
    if (ComGzipBuffer==NULL)
    {
            return -1;
        
    }
      
    BOOL bRet=UngzipPacket((unsigned char*)pChGzipBuff,dwReaded,pChDataBuff,&dwTransferSize);
    
    //注意此处dwGzipSize的必须有值,不能传递0考虑到压缩之后一定比原来数据小。传递dwTransferSize大小就可以
    
    BOOL bReturn=ComGzipBuffer((unsigned char*)pChDataBuff,dwTransferSize,pChGzipBuff,&dwGzipSize);
    
    FreeLibrary(hInst);


    
    //zlib同上演示样例。


  • 相关阅读:
    如何解决秒杀的性能问题和超卖的讨论
    Redis作者谈Redis应用场景
    Net开源工作流Roadflow的使用与集成
    VisualStudioOnline协同工作流程
    中文乱码?不,是 HTML 实体编码!(转)
    Nginx搭建反向代理服务器过程详解(转)
    2016年1月15日面试某互联网公司总结(转)
    浏览器缓存知识小结及应用(转)
    Gradle多项目配置的一个demo
    Android getResources的作用和须要注意点
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5272447.html
Copyright © 2011-2022 走看看