gzip and deflate
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相关推荐
- gzip 与 deflate :gzip算法原理深入分析
gzip 与 deflate :gzip算法原理深入分析 gzip 与 deflate :gzip算法原理深入分析 - gzip 与 deflate :gzip算法原理深入分析 [复制链接] ...
- httpClient的get请求 请求头gzip和deflate的乱码解决方案
利用httpClient下载页面,先利用浏览器查询页面源代码得知页面编码为utf-8,但生成字符串后总是为乱码,经过查询得知,在设置httpGet参数时,设置了接受压缩类型为Gzip,但却没有对其进行 ...
- Web服务器处理HTTP压缩之gzip、deflate压缩
一.什么是gzip gzip是一种数据格式,默认且目前仅使用deflate算法压缩data部分: Gzip是一种流行的文件压缩算法,现在的应用十分广泛,尤其是在Linux平台.当应用Gzip压 ...
- gzip和deflate的区别
我们在配置网站GZip压缩的时候,会发现有两个模块可以设置的,一个是GZip模块的参数配置,另一个是Deflate模块的参数配置,他们的设置方法是一样的.刚开始时我不太明白,这两地方有什么不同?网站开 ...
- Spring MVC参数处理--gzip和deflate的几点区别
今天在获取HTTP报文头的Accept-Encoding时,在控制台蹦出个gzip和deflate,有些陌生,只是知道这是两种压缩算法.那么它们到底有什么不同呢?这里转载一位技术人员的文章,做一下详解 ...
- GZip、Deflate压缩算法对应的C#压缩解压函数
GZip解压函数 View Code GZip压缩函数 View Code 1 /// <summary> 2 /// GZip压缩函数 3 /// </summary> 4 ...
- c#压缩解压缩bzip2、tar、zip、gzip、deflate、ntdll
在压缩解压缩前需要将图片.文字.字符串等数据转化为字节数组byte[], 压缩解压缩以后再将字节数组byte[]转化为图片.文字.字符串. 转化过程请参考 http://blog.csdn.net/l ...
- web中gzip,deflate的压缩与解压
一,对发送请求进行gzip,deflate压缩 1:gzip的情况 Java代码 Sring url = "http://localhost/save"; PostMethod ...
- C# 利用HttpWebRequest模拟登陆获取数据设置Accept-Encoding为gzip,deflate后返回的网页是乱码处理
原由:在解决模拟登陆抓取数据的时候post一个地址时老是获取的内容是乱码. 经过检查最终应该是编码是HttpWebRequest.Headers.Add("Accept-Encoding&q ...
最新文章
- python dict遍历性能,Python:遍历list vs over dict items效率
- android 新浪财经截屏分享,[图]Android 12截图曝光:启用全新UI 增强隐私保护功能...
- Mac上运行第一个Hadoop实例
- 08-Measured Boot Driver (MBD)
- VxWorks常用的命令
- 学习笔记7-C语言-进制转换、原返补、位运算、函数
- 【0802 | Day 7】Python进阶(一)
- dhcp服务器显示2个ip,下列关于Windows 2003系统DHCP服务器的描述中,错误的是( )。A.DHCP服务器负责多个网段IP地址分配_考题宝...
- C语言讲义——C语言的布尔类型
- NLP特征工程(待完善细节)
- ubuntu环境下如何设置开机启动项
- matlab pn,PN序列生成代码快速参考
- Unity3D 编辑器扩展 强大的OnValidate
- oracle begin 后声明,Oracle BEGIN END 详细用法
- C++ 实现斗地主玩法
- ERP咨询顾问必备的7种公关能力
- 安全测试-SQL注入
- csc和acsc--余割和反余割函数
- access百度翻译 get_php百度翻译类
- cuda 安装失败 Nsight Visual Studio Edition 11.1安装失败
热门文章
- nginx+keepalive实现高可用负载均衡
- excel系列【下拉项二选一】
- 【每日一题】JVM篇-年轻代到年老代的晋升过程的判断条件是什么呢
- CMU 15-445/645-Note11-Distributed Databases
- IO复用功能占用时,普通GPIO功能使用
- 2019年第十届蓝桥杯C/C++ 省赛B组真题+题解
- 【信号处理】基于蚁群优化随机共振检测附matlab代码
- 明日方舟公式计算机,明日方舟公开招募公式汇总
- argc和argv的使用总结
- 改造Kindeditor之:自定义图片上传插件。 外加给图片增加水印效果的选择。