1. 导入libz库(如:libz 1.2.5.dylib)

2. 引入头文件

  1. #import "zlib.h"

3. 实现解压(输入输出都为NSData对象)

  1. -(NSData *)uncompressZippedData:(NSData *)compressedData
  2. {
  3. if ([compressedData length] == 0) return compressedData;
  4.  
  5. unsigned full_length = [compressedData length];
  6.  
  7. unsigned half_length = [compressedData length] / 2;
  8. NSMutableData *decompressed = [NSMutableData dataWithLength: full_length + half_length];
  9. BOOL done = NO;
  10. int status;
  11. z_stream strm;
  12. strm.next_in = (Bytef *)[compressedData bytes];
  13. strm.avail_in = [compressedData length];
  14. strm.total_out = 0;
  15. strm.zalloc = Z_NULL;
  16. strm.zfree = Z_NULL;
  17. if (inflateInit2(&strm, (15+32)) != Z_OK) return nil;
  18. while (!done) {
  19. // Make sure we have enough room and reset the lengths.
  20. if (strm.total_out >= [decompressed length]) {
  21. [decompressed increaseLengthBy: half_length];
  22. }
  23. // chadeltu 加了(Bytef *)
  24. strm.next_out = (Bytef *)[decompressed mutableBytes] + strm.total_out;
  25. strm.avail_out = [decompressed length] - strm.total_out;
  26. // Inflate another chunk.
  27. status = inflate (&strm, Z_SYNC_FLUSH);
  28. if (status == Z_STREAM_END) {
  29. done = YES;
  30. } else if (status != Z_OK) {
  31. break;
  32. }
  33.  
  34. }
  35. if (inflateEnd (&strm) != Z_OK) return nil;
  36. // Set real length.
  37. if (done) {
  38. [decompressed setLength: strm.total_out];
  39. return [NSData dataWithData: decompressed];
  40. } else {
  41. return nil;
  42. }
  43. }

使用例子:

  1. // gzip解压,mapFilePath为待解压文件路径
  2. NSData *dataInitial = [NSData dataWithContentsOfFile:mapFilePath]; // 解压前
  3. NSData *dataUncompressed = [self uncompressZippedData:dataInitial]; // 解压后

參考博客:

在iPhone开发中实现解压缩gzip

iOS gzip解压的更多相关文章

  1. Android获取网络数据进行GZIP解压

    说明:现在很多网站都会在回传数据的时候进行GZIP压缩,我们可以在请求头中申明支持GZIP压缩.可以减轻网络传输压力,Xutils中已经实现. 下面是一个DEMO,便于理解. private void ...

  2. VB6进行GZIP解压&C#进行GZIP压缩和解压

    VB进行GZIP解压的,DLL是系统的,如果没有 [点击下载] Option Explicit 'GZIP API '----------------------------------------- ...

  3. httplib 和 httplib2区别之 gzip解压

    HTTP请求头Accept-encoding: gzip信息告诉服务器,如果它有任何新数据要发送给时,请以压缩的格式发送.如果服务器支持压缩,它将返回由 gzip 压缩的数据并且使用Content-e ...

  4. 模拟请求(模拟header gzip解压 泛型)

    WebClient HeaderData是自定义类对象,存储header信息 private static T GetDataCommonMethod<T>(string url, str ...

  5. asp.net实现GZip压缩和GZip解压

    最近在开发一个网站doc.115sou.com,使用到了GZip压缩技术,经过多次搜索找到asp.net中用GZip对数据压缩和解压缩非常方便,当我第一次拿到这个类的时候却感觉很迷茫,无从下手.主要是 ...

  6. iOS文件解压&&数据加密

    一文件压缩.这里我们需要一个第三方SSZipArchive(需要添加libz.td) #import "ViewController.h" #import "SSZipA ...

  7. gzip解压和压缩

    我发现网上很少有这样完整例子,加上英文有不好,走了好多弯路.我现在把从网上找到例子帖出来,可以解压HTTP gzip的 #include <stdlib.h> #include <s ...

  8. gzip解压压缩的字符串数据

    import urllib2 from StringIO import StringIO import gzip def loadData(url): request = urllib2.Reques ...

  9. gzip解压文件报错

    #tar -xvf jdk-8u131-linux-x64.tar.gz,执行命令后报错如下: gzip: stdin: not in gzip format tar: Child returned ...

随机推荐

  1. Ajax兼容性问题

    对于IE7及以上直接使用 XMLHttpRequest 就行,但对于过老版本IE建议直接提示用户下载新版浏览器更佳.或者用以下代码兼容IE6: function CreateXHR() { if(XM ...

  2. 【codeforces 794C】Naming Company

    [题目链接]:http://codeforces.com/contest/794/problem/C [题意] 有n个位置; 两个人; 每个人都有n个字符组成的集合s1,s2(可以有重复元素); 然后 ...

  3. Ubuntu(Linux Mint):sudo apt-get upgrade升级失败

    Ubuntu上进行sudo apt-get upgrade后出现异常,升级失败. 异常信息如下: E: dpkg was interrupted, you must manually run 'dpk ...

  4. PatentTips - Increasing turbo mode residency of a processor

    BACKGROUND Many modern operating systems (OS's) use the Advanced Configuration and Power Interface ( ...

  5. HDU——T 2119 Matrix

    http://acm.hdu.edu.cn/showproblem.php?pid=2119 Time Limit: 5000/1000 MS (Java/Others)    Memory Limi ...

  6. linux 命令 xxd

    xxd,能够查看linux下文件的二进制表示.man一下xxd.能够得到下面信息 NAME        xxd - make a hexdump or do the reverse. SYNOPSI ...

  7. hdu 4544 湫湫系列故事——消灭兔子 优先队列+贪心

    将兔子的血量从小到大排序,箭的威力也从小到大排序, 对于每仅仅兔子将威力大于血量的箭增加队列,写个优先队列使得出来数位价钱最少.. #include<stdio.h> #include&l ...

  8. firefox 被劫持hao123 主页

    快捷方式没有问题 也不是ff的配置文件里user.js的问题 是haozip的问题 最后查到是windows/system/Hao*.sys 这个文件的问题(还有zolsoft.sys) 删除这个文件 ...

  9. sc.textFile("file:///home/spark/data.txt") Input path does not exist解决方法——submit 加参数 --master local 即可解决

    use this val data = sc.textFile("/home/spark/data.txt") this should work and set master as ...

  10. 新疆大学OJ(ACM) 1047: string 字符串排序

    1047: string 时间限制: 1 Sec  内存限制: 128 MB 题目描述 有n个字符串字符串n<=50000,把所有字符串串起来,得到一个字典序最小的字符串. 输入 输入第一行是一 ...