`
ydbc
  • 浏览: 719619 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

客户端的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就可以了。

分享到:
评论

相关推荐

    利用JAVASCRIPT即你想那个GZIP压缩与解压缩

    利用JAVASCRIPT即你想那个GZIP压缩与解压缩 最近流行的网络游戏(FLASH)数据传输都是用GZIP进行压缩与解压缩的,在客户端FLASH对与服务器交互的数据进行解压缩,

    php对gzip文件或者字符串解压实例参考

    要采集一个网站,目标站采用了gzip压缩传输网页,本来应该只要发送一个http头 Accept-Encoding: identity或者干脆不发送这个头等,就可以使目标站返回没有经过gzip压缩的页面了,不过很不幸,目标站无视客户端的请求...

    Arduino-T002-Laser-Tank-Base64:本教程讲解如何结合使用Base64和gzip压缩来减少Arduino代码库的大小。 您创建一个自定义网页,将其gzip压缩,编码为Base64,然后将其保存到Arduino。 建立连接后,您可以将其发送到客户端,然后关闭并运行

    这个过程很简单,您可以创建一个自定义网页,对其进行gzip处理,并使用Base64对其进行编码,然后将其保存到Arduino中。 建立连接后,您的Arduino Web服务器将对其进行解码,然后将其传输到客户端。 然后,客户端...

    pgsql-gzip:适用于PostgreSQLGzip压缩和解压缩

    PostgreSQL gzip / gunzip函数 动机 有时,您只需要压缩bytea对象,然后再将其返回给客户端即可。 有时,您会从客户端收到压缩的bytea ,因此必须先对其进行解压缩,然后才能使用它。 此扩展用于此。 此扩展名不...

    GZip流压缩&Web流压缩组件

    default.asp 第二个产品的例子,用于客户端处理处理接受文件,GZip流  如果您有好的建议或BUG汇报,请邮件给我,我先表示感谢。  重要说明,此软件不允许使用于商业用途,否则会受到牵连。  另注,由于本...

    IIS启用Gzip的方法与优缺点分析

    现代的浏览器IE6和Firefox都支持客户端Gzip,也就是说,在服务器上的网页,传输之前,先使用Gzip压缩再传输给客户端,客户端接收之后由浏览器解压显示,这样虽然稍微占用了一些服务器和客户端的CPU,但是换来的是更...

    IIS6.0下的Gzip.dll

    先使用Gzip压缩再传输给客户端,客户端接收之后由浏览器解压显示,这样虽然稍微占用了一些服务器和客户端的CPU,但是换来的是更高的带宽利用率。对于纯文本来讲,压缩率是相当可观的。如果每个用户节约50%的带宽,...

    独立主机/VPS 一键开启IIS的GZIP方法

    现代的浏览器IE6和Firefox都支持客户端Gzip,也就是说,在服务器上的网页,传输之前,先使用Gzip压缩再传输给客户端,客户端接收之后由浏览器解压显示,这样虽然稍微占用了一些服务器和客户端的CPU,但是换来的是更...

    zlib库压缩和解压字符串STL string的实例详解

    1.zlib库可以实现gzip和zip方式的压缩, 这里只介绍zip方式的二进制压缩, 压缩比还是比较可观的, 一般写客户端程序已足够. 2.修改了一下zpipe.c的实现, 其实就是把读文件改为读字符串, 写文件改为写字符串即可. 例子 ...

    AMFTP (FTP) 2.0.zip

    FTP上传管理工具 - AMFTP AMFTP - WEB FTP管理客户端 ...04) 压缩: Linux 环境全面支持 zip tar gzip(tar.gz) 格式解压与压缩。 05) 权限: 支持在线全面设置文件权限属性、同时支持应用到所有子目录和文件。

    AMFTP (FTP) v2.0.zip

    FTP上传管理工具 - AMFTP AMFTP - WEB FTP管理客户端 ...04) 压缩: Linux 环境全面支持 zip tar gzip(tar.gz) 格式解压与压缩。 05) 权限: 支持在线全面设置文件权限属性、同时支持应用到所有子目录和文件。

    java编程100例

    实例53 用GZIP压缩解压文件 实例54 用Zip压缩多个文件 实例55 从压缩包中提取文件 实例56 zip压缩包查看程序 实例57 压缩中文文件名的文件 实例58 存储与读取对象 实例59 Java画图程序 实例60 从网络取得图像 实例61...

    iperf for linux Unix

    Iperf2 0 2目前仅提供源码包的下载 当你下载到Iperf源码包后 在类unix系统上 需要先解压缩源码包 使用解压缩命令gzip或tar 解压后会产生新文件夹“Iperf 2 0 2” Iperf2 0 2在以下操作系统中可以很好的被编译:Linux...

    nodejs body-parser 解析post数据实例

    可以通过body-parser 对象创建中间件,当接收到客户端请求时所有的中间件都会给req.body 添加属性,请求体为空,则解析为空{} (或者出现错误)。 bodyParser.json(options) 中间件只会解析 json ,允许请求提任意...

    java源码包---java 源码 大量 实例

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    Actix Web 是一个功能强大、实用且速度极快的 Rust 网络框架。

    Actix网站Actix Web 是一个功能强大、实用且速度极快的 Rust 网络框架特征支持HTTP/1.x和HTTP/2流媒体和流水线保持活动和缓慢的请求处理客户端/服务器WebSockets支持透明内容压缩/解压(br、gzip、deflate)强大的...

    java源码包2

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...

    java源码包3

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...

    PHP网站基础优化方法小结

     使用该代码后服务器会压缩所有需要传送到客户端的代码,并在浏览器中进行解压,从而使网站运行速度加快。这一功能还可以节省网站空间的流量。 2、不要滥用Javascript和Ajax  只在需要的时候才使用Javascript和...

Global site tag (gtag.js) - Google Analytics