Gzip/deflate 解码

 

一般的 http 网页在传输时为了减少流量加快传输速度,都会对数据进行压缩,压缩方式一般有 gzip deflate 两种方式。

gzip 的解压方式如下:

int httpgzdecompress(Byte *zdata, uLong nzdata, Byte *data, uLong *ndata)

{

    int err = 0;

    z_stream d_stream = {0}; /* decompression stream */

    static char dummy_head[2] =

    {

        0x8 + 0x7 * 0x10,

        (((0x8 + 0x7 * 0x10) * 0x100 + 30) / 31 * 31) & 0xFF,

    };

    d_stream.zalloc = (alloc_func)0;

    d_stream.zfree = (free_func)0;

    d_stream.opaque = (voidpf)0;

    d_stream.next_in  = zdata;

    d_stream.avail_in = 0;

    d_stream.next_out = data;

    if(inflateInit2(&d_stream, 47 ) != Z_OK) return -1;

    while (d_stream.total_out < *ndata && d_stream.total_in < nzdata) {

        d_stream.avail_in = d_stream.avail_out = 1; /* force small buffers */

        if((err = inflate(&d_stream, Z_NO_FLUSH)) == Z_STREAM_END) break;

        if(err != Z_OK )

        {

            if(err == Z_DATA_ERROR)

            {

                d_stream.next_in = (Bytef*) dummy_head;

                d_stream.avail_in = sizeof(dummy_head);

                if((err = inflate(&d_stream, Z_NO_FLUSH)) != Z_OK)

                {

                    return -1;

                }

            }

            else return -1;

        }

    }

    if(inflateEnd(&d_stream) != Z_OK) return -1;

    *ndata = d_stream.total_out;

    return 0;

}

 

Deflate gzip 解压函数的差别只在于

    if(inflateInit2(&d_stream, -15 ) != Z_OK) return -1;

 

gzip and deflate相关推荐

  1. gzip 与 deflate :gzip算法原理深入分析

    gzip 与 deflate :gzip算法原理深入分析 gzip 与 deflate :gzip算法原理深入分析 - gzip 与 deflate :gzip算法原理深入分析 [复制链接]     ...

  2. httpClient的get请求 请求头gzip和deflate的乱码解决方案

    利用httpClient下载页面,先利用浏览器查询页面源代码得知页面编码为utf-8,但生成字符串后总是为乱码,经过查询得知,在设置httpGet参数时,设置了接受压缩类型为Gzip,但却没有对其进行 ...

  3. Web服务器处理HTTP压缩之gzip、deflate压缩

    一.什么是gzip ​ gzip是一种数据格式,默认且目前仅使用deflate算法压缩data部分: ​ Gzip是一种流行的文件压缩算法,现在的应用十分广泛,尤其是在Linux平台.当应用Gzip压 ...

  4. gzip和deflate的区别

    我们在配置网站GZip压缩的时候,会发现有两个模块可以设置的,一个是GZip模块的参数配置,另一个是Deflate模块的参数配置,他们的设置方法是一样的.刚开始时我不太明白,这两地方有什么不同?网站开 ...

  5. Spring MVC参数处理--gzip和deflate的几点区别

    今天在获取HTTP报文头的Accept-Encoding时,在控制台蹦出个gzip和deflate,有些陌生,只是知道这是两种压缩算法.那么它们到底有什么不同呢?这里转载一位技术人员的文章,做一下详解 ...

  6. GZip、Deflate压缩算法对应的C#压缩解压函数

    GZip解压函数 View Code GZip压缩函数 View Code 1 /// <summary> 2 /// GZip压缩函数 3 /// </summary> 4 ...

  7. c#压缩解压缩bzip2、tar、zip、gzip、deflate、ntdll

    在压缩解压缩前需要将图片.文字.字符串等数据转化为字节数组byte[], 压缩解压缩以后再将字节数组byte[]转化为图片.文字.字符串. 转化过程请参考 http://blog.csdn.net/l ...

  8. web中gzip,deflate的压缩与解压

    一,对发送请求进行gzip,deflate压缩 1:gzip的情况 Java代码   Sring url = "http://localhost/save"; PostMethod ...

  9. C# 利用HttpWebRequest模拟登陆获取数据设置Accept-Encoding为gzip,deflate后返回的网页是乱码处理

    原由:在解决模拟登陆抓取数据的时候post一个地址时老是获取的内容是乱码. 经过检查最终应该是编码是HttpWebRequest.Headers.Add("Accept-Encoding&q ...

最新文章

  1. python dict遍历性能,Python:遍历list vs over dict items效率
  2. android 新浪财经截屏分享,[图]Android 12截图曝光:启用全新UI 增强隐私保护功能...
  3. Mac上运行第一个Hadoop实例
  4. 08-Measured Boot Driver (MBD)
  5. VxWorks常用的命令
  6. 学习笔记7-C语言-进制转换、原返补、位运算、函数
  7. 【0802 | Day 7】Python进阶(一)
  8. dhcp服务器显示2个ip,下列关于Windows 2003系统DHCP服务器的描述中,错误的是( )。A.DHCP服务器负责多个网段IP地址分配_考题宝...
  9. C语言讲义——C语言的布尔类型
  10. NLP特征工程(待完善细节)
  11. ubuntu环境下如何设置开机启动项
  12. matlab pn,PN序列生成代码快速参考
  13. Unity3D 编辑器扩展 强大的OnValidate
  14. oracle begin 后声明,Oracle BEGIN END 详细用法
  15. C++ 实现斗地主玩法
  16. ERP咨询顾问必备的7种公关能力
  17. 安全测试-SQL注入
  18. csc和acsc--余割和反余割函数
  19. access百度翻译 get_php百度翻译类
  20. cuda 安装失败 Nsight Visual Studio Edition 11.1安装失败

热门文章

  1. nginx+keepalive实现高可用负载均衡
  2. excel系列【下拉项二选一】
  3. 【每日一题】JVM篇-年轻代到年老代的晋升过程的判断条件是什么呢
  4. CMU 15-445/645-Note11-Distributed Databases
  5. IO复用功能占用时,普通GPIO功能使用
  6. 2019年第十届蓝桥杯C/C++ 省赛B组真题+题解
  7. 【信号处理】基于蚁群优化随机共振检测附matlab代码
  8. 明日方舟公式计算机,明日方舟公开招募公式汇总
  9. argc和argv的使用总结
  10. 改造Kindeditor之:自定义图片上传插件。 外加给图片增加水印效果的选择。