android http zlib,利用zlib库对HTTP收到的gzip数据解压
1、首先说为什么采用zlib解压,因为zlib可以解压内存数据。
2、下载zlib库后,自己在projcts目录里面根据需要编译lib库
3、静态链接只需要zlib.h ;zconf.h;zlib.lib三个文件即可(动态的不介绍了)
4、解压函数:
/* HTTP gzip decompress */
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, -MAX_WBITS) != Z_OK) return -1;
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;
}直接调用就OK了 注意传入的buffer数据和长度都要赋值
eg:
char* pDest = new char[1024 * 16];
uLong ulLength = 1024*16;
gzdecompress((Byte*)precvBuff, nCount, (Byte*)pDest, &ulLength);
android http zlib,利用zlib库对HTTP收到的gzip数据解压相关推荐
- Numpy:利用Numpy库建立可视化输入的二次函数数据点集np.linspace+np.random.shuffle+np.random.normal
Numpy:利用Numpy库建立可视化输入的二次函数数据点集np.linspace+np.random.shuffle+np.random.normal 目录 输出结果 代码设计 输出结果 代码设计 ...
- libjpeg库的简单使用使用----jpeg图片解压
libjpeg库其实已经可以满足我们日常处理日常简单图片之间的转换了.下面就来介绍一下jpeg库的解压和压缩过程. 首先来讲解压操作过程: 1.分配jpeg对象结构体空间,并初始化. 2.指定解压数据 ...
- 利用赫夫曼编码进行数据解压
基本概念 代码实现 package com.atguigu.huffmancode;import com.sun.org.glassfish.external.statistics.CountStat ...
- Python 技术篇-利用pyqt5库读取剪切板已复制数据的格式类型实例演示,python判断复制文件的文件类型
首先介绍下复制内容类型的几种分类: ['text/plain'] 是纯文本类型. ['text/html', 'text/plain'] 是 html 的格式 + 文本类型,找个网页复制一段文字就可以 ...
- Python:利用openpyxl库,将sorce.xlsx的数据复制到target.xlsx
Ps:给自己留的备份,以后不想写不想查不想百度不想问了. import openpyxl wb_ini = openpyxl.load_workbook('source.xlsx') ws_ini = ...
- Python3-excel文档操作(四):利用openpyxl库处理excel表格:将数据进行可视化展示在Excel中
1.简介: openpyxl不仅提供了将数据一行列的形式对应到Excel表格中,以及相关的添加,删除,获取等操作: 还提供了将数据进行图形化展示的相关组件(类),使得数据图形化在excel表格中的展示 ...
- Python 技术篇-用zipfile库进行zip文件的压缩与解压实例演示,python压缩本地文件夹为zip文件并保留目录结构
首先给大家演示下 zip 文件的解压方法. import zipfiledef zip_extract_to(path_zip, path_aim):'''作用:解压压缩包参数一:压缩包位置参数二:解 ...
- 使用libjpeg-turbo库中的TurboJPEG API实现图片解压,缩放及压缩功能
概述:前一篇博客中说到libjpeg-turbo的使用,有一些错误也在前篇博客中纠正了,现在呢,就用TurboJPEG API实现图片的解压,缩放,压缩. 1,直接上代码(简单粗暴,重要代码都加了注释 ...
- 利用Xshell连接服务器导入web安装包并解压启动
1.首先我这里用的是腾讯云的服务器,将服务器开机 2.打开传说中的Xshell下载地址直接下载都一样的 3.下载完成之后,就可以进入Xshell连接云主机,顺便配置环境了 主机输入自己腾讯云的地址 4 ...
最新文章
- java中的Random()注意!
- 如何搞30等角视图.斜45度说法不合理
- 定制化Azure站点Java运行环境(1)
- Map的4种遍历方法
- 每日Linux命令(1)-date
- java null 转空_java 对象属性为 null 值转为 空串
- SpringBoot集成Mybatis用法笔记
- Packt发行的$ 5 Java编程书籍:精通Java 9,Java 9 High Performance
- rpm安装mysql5.5_CentOS下以RPM方式安装MySQL5.5
- mysql 存储汉字_MySQL存储汉字
- 树和二叉树2——输出广义表形式(带括号)二叉树
- [转载] Python Pandas 转换unix时间戳
- 一个入门级别的前端打包工具
- 算法:什么是棒球游戏问题?
- 51单片机学习笔记——DA转换
- 地方科技局重点科技项目在线申报管理系统
- “秘闻披露”:比尔·盖茨给QQ老总的一封信
- 三、路由协议——直连路由、静态路由、缺省路由、路由优先级和路由度量、路由冗余和备份(浮动静态路由)
- 玩 Spring框架
- 人力资源管理专业知识与实务(初级)【4】