客户端的gzip解压
服务端使用gzip压缩,可以大幅度减小传输包的体积,加快客户端网络请求速度,为用户节省流量。当服务器返回的httpHeader的"Content-Encoding" 属性的值是gzip时,数据会自动被解压缩,但有时候在客户端还没拿到数据的时候,就已经被某些网关解压了,这样gzip就没有起到作用。因此可以约定其他策略,防止网关解压,例如在别的头属性中标记gzip。
如此,就需要我们自己来解压gzip数据。方法如下:添加framework库中的libbz2.1.0.dylib;给nsdata添加方法:
- (NSData *)gzipUnpack
{
if ([self length] == ) return self;
unsigned full_length = [self length];
unsigned half_length = [self length] / 2;
NSMutableData *decompressed = [NSMutableData dataWithLength: full_length + half_length];
BOOL done = NO;
int status;
z_stream strm;
strm.next_in = (Bytef *)[self bytes];
strm.avail_in = [self length];
strm.total_out = 0;
strm.zalloc = Z_NULL;
strm.zfree = Z_NULL;
if (inflateInit2(&strm, (15+32)) != Z_OK) return nil;
while (!done){
if (strm.total_out >= [decompressed length])
[decompressed increaseLengthBy: half_length];
strm.next_out = [decompressed mutableBytes] + strm.total_out;
strm.avail_out = [decompressed length] - strm.total_out;
// Inflate another chunk.
status = inflate (&strm, Z_SYNC_FLUSH);
if (status == Z_STREAM_END) done = YES;
else if (status != Z_OK) break;
}
if (inflateEnd (&strm) != Z_OK) return nil;
// Set real length.
if (done){
[decompressed setLength: strm.total_out];
return [NSData dataWithData: decompressed];
}
return nil;
}
并引入头文件 #import "zlib.h"
将拿到的data直接调用unPack方法就完成解压了。
如果编译出现link error,就到Target的设置,找到"Other Linker Flags"这一项,添加-lz就可以了。
客户端的gzip解压相关推荐
- HTML中chunked解码和gzip解压
chunked编码 chunked编码的的好处 当访问的时动态页面时,服务器则无法预知内容的大小,因此需要一遍产生数据,一边发送数据,将数据分块发送(服务器通过响应头'Transfer-Encodin ...
- httplib 和 httplib2区别之 gzip解压
HTTP请求头Accept-encoding: gzip信息告诉服务器,如果它有任何新数据要发送给时,请以压缩的格式发送.如果服务器支持压缩,它将返回由 gzip 压缩的数据并且使用Content-e ...
- 将多个文件压缩成gzip,将gzip解压成多个文件
第一步:文件压缩和解压缩方法 //解压gzip文件public static boolean extractZip(File file, File parent) {ZipFile zf ...
- linux gzip 解压 函数,获取http的gzip内容,并解压
问题: 入问题,问题答案立即呈现在您眼前! 寻找gzip 获取一个网页数据返回的编码类型是gzip,我该怎么解压缩 HTTP头获取? 如何用vb获取网络上的xml文件,并解析内容 关于GZIP的解码 ...
- gzip 解压_简简单单_百度空间
gzip 解压_简简单单_百度空间 gzip 解压_简简单单_百度空间 问题: 入问题,问题答案立即呈现在您眼前! gzip格式rfc 1952 http://www.ietf.org/rfc/rfc ...
- asp.net实现GZip压缩和GZip解压
最近在开发一个网站doc.115sou.com,使用到了GZip压缩技术,经过多次搜索找到asp.net中用GZip对数据压缩和解压缩非常方便,当我第一次拿到这个类的时候却感觉很迷茫,无从下手.主要是 ...
- java gzip 解压文件_Java实现文件压缩与解压[zip格式,gzip格式]
原文:http://www.cnblogs.com/visec479/p/4112881.html#3069573 Java实现ZIP的解压与压缩功能基本都是使用了Java的多肽和递归技术,可以对单个 ...
- gzip解压str python_有哪些你不知道的Python小工具
ython作为越来越流行的一种编程语言,不仅仅是因为它语言简单,有许多现成的包可以直接调用. python中还有大量的小工具,让你的python工作更有效率. 1. 快速共享 HTTP服务器 Simp ...
- 文件流,gzip解压,压缩
目录 文件画布 写入 (空文件 Fout=new File(Parent,entry.getName());) FileOutputStream out=new FileOutputStream(Fo ...
- 基于pako的gzip解压
let strData = atob(res.data) let charData = strData.split('').map(function (x) { return x.charCodeAt ...
最新文章
- python基础练习(五)
- interface declaration, parcelable declaration, AidlTokenType.import or AidlTokenType.package ...
- 光伏电站清扫机器人_光伏智能清扫机器人
- java验证码的实现
- 快速傅里叶变换python_【原创】OpenCV-Python系列之傅里叶变换(三十八)
- JDK8新特性之重复注解
- JavaBean 持久化
- shell与其他语言不同点
- nlp 停用词处理java_NLP入门:文本预处理(一)停用词
- ckeditor 3.6一直提示“例外被抛出且未被接住”的问题的解决方法
- linux学习笔记3——计算机概述:主板、电源、数据表示方式、编码集
- 电磁流量计流速信号特征
- YOLOv5、v7改进之三十九:引入改进遮挡检测的Tri-Layer插件 | BMVC 2022
- 28个Java开发常用规范技巧总结
- Postman发送带cookie的http请求
- iCloud云上贵州,2018数博会连接2亿多用户
- 体育生学编程——html学习
- 面试时如何考察应聘者的素质?
- 以业务改进为目标的流程优化方法
- 红旗linux 操作系统,红旗Linux操作系统9.0官方下载-红旗Linux操作系统9.0正式版(基于c语言)免费版 - 维维软件园...
热门文章
- 沧小海基于xilinx srio核的学习笔记之第四章 Xilinx SRIO的示例分析(二)
- 计算机类专业本科学生成长四阶段必读四本书推荐
- 获取中国各省市区县经纬度的方法
- SI4463的数据冲撞解决办法
- 软件设计模式与体系结构 期末课后题
- Kali 暴力破解wifi密码
- CSP202104-4 校门外的树
- Xshell6 + Xftp6 绿色破解
- 电子板书:Word,PPT,PDF手写批注很轻松
- python等额本息和等额本金_房贷利率有没有套路?这是我见过最透彻的Python版解读!...