关闭

iOS网路传输zip压缩

标签: ios压缩网络数据nsstring
531人阅读 评论(0) 收藏 举报
分类:

iOS网络请求有时候需要zip压缩处理进行数据传输,代码如下

//解压缩
- (NSData *)gzipInflate:(NSData*)data
{
    if ([data length] == 0) return data;

    unsigned full_length = [data length];
    unsigned half_length = [data length] / 2;

    NSMutableData *decompressed = [NSMutableData dataWithLength: full_length + half_length];
    BOOL done = NO;
    int status;

    z_stream strm;
    strm.next_in = (Bytef *)[data bytes];
    strm.avail_in = [data length];
    strm.total_out = 0;
    strm.zalloc = Z_NULL;
    strm.zfree = Z_NULL;

    if (inflateInit2(&strm, (15+32)) != Z_OK)
        return nil;

    while (!done)
    {
        // Make sure we have enough room and reset the lengths.
        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];
    }
    else return nil;
}


//压缩
- (NSData *)gzipDeflate:(NSData*)data
{
    if ([data length] == 0) return data;

    z_stream strm;

    strm.zalloc = Z_NULL;
    strm.zfree = Z_NULL;
    strm.opaque = Z_NULL;
    strm.total_out = 0;
    strm.next_in=(Bytef *)[data bytes];
    strm.avail_in = [data length];

    // Compresssion Levels:
    //   Z_NO_COMPRESSION
    //   Z_BEST_SPEED
    //   Z_BEST_COMPRESSION
    //   Z_DEFAULT_COMPRESSION

    if (deflateInit2(&strm, Z_DEFAULT_COMPRESSION, Z_DEFLATED, (15+16), 8, Z_DEFAULT_STRATEGY) != Z_OK) return nil;

    NSMutableData *compressed = [NSMutableData dataWithLength:16384];  // 16K chunks for expansion

    do {

        if (strm.total_out >= [compressed length])
            [compressed increaseLengthBy: 16384];

        strm.next_out = [compressed mutableBytes] + strm.total_out;
        strm.avail_out = [compressed length] - strm.total_out;

        deflate(&strm, Z_FINISH);

    } while (strm.avail_out == 0);

    deflateEnd(&strm);

    [compressed setLength: strm.total_out];
    return [NSData dataWithData:compressed];
}

=====点击下载代码demo=====

1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

HTTP 协议详解与HTTP 协议压缩

HTTP 协议详解  当今web程序的开发技术真是百家争鸣,ASP.NET, PHP, JSP,Perl, AJAX 等等。 无论Web技术在未来如何发展,理解Web程序之间通信的基本协...
  • lky5387
  • lky5387
  • 2013-05-21 10:01
  • 7923

c#中关于压缩数据流和解压数据流的实现

c#中压缩数据流的方法 在网上找了很久没有找到ziji
  • zhujunxxxxx
  • zhujunxxxxx
  • 2014-08-26 19:03
  • 10043

将多个文件进行压缩处理,然后传输到服务器

目前项目正需要多个文件压缩上传,在这里遇到一些坑与解决方案。 我这里的问题是从打印机复印,扫描时候的留底文件。在拿到文件路径后,就要根据这个路径拿到文件,进行压缩传输,可供下载。 其中遇到的问题 ...
  • cgperfect
  • cgperfect
  • 2016-06-30 15:44
  • 2504

Linux系统文件的网络传输、归档tar、压缩zip、gzip、bzip2、xz、gz、bz2

数据的远程传输,本次博文主要介绍了不同主机之间在可以通信的前提下的文件远程传输上传和下载、文件的打包和压缩,希望对读者有所帮助。
  • Sunny_Future
  • Sunny_Future
  • 2017-10-24 00:37
  • 431

字符串WebService上先zip压缩再base64编码后传输

先对字符串进行zip压缩,再进行base64编码 public string ZipBase64(string xml) { //压缩 ...
  • zqb10210811
  • zqb10210811
  • 2013-04-27 13:48
  • 979

序列化的作用,应用场景,除了网路传输

关于更多java序列化的问题可以参见JAVA系列之对象的序列化与反序列化       Java的序列化机制只序列化对象的属性值,而不会去序列化什么所谓的方法。其实这个问题简单思考一下就可以搞清楚,方法...
  • a468903507
  • a468903507
  • 2015-04-14 16:47
  • 1091

网路编程(二)UDP和TCP协议下传输数据

UDP传输数据特点 只需要一个目的地,然后将数据一直发送就行了。类似发快递1.将数据及源和目的封装成数据包中,不需要建立连接 2.每个数据报的大小在限制在64k内 3.因无连接,是不可靠协议...
  • weixin_37720904
  • weixin_37720904
  • 2017-04-05 19:01
  • 87

网路传输模型(osI和tcp/ip)

一、osi传输模型为理论七层传输模型,为国际组织的指导性原则        tcp/ip 为实际应用中形成的一套规范,之所以称为tcp/ip模型是因为传输层的tcp协议和网络层的ip协议应用最为...
  • cheng731115175
  • cheng731115175
  • 2015-11-16 15:25
  • 304

IOS开发—图片压缩/解压成Zip文件

图片压缩/解压成Zip文件 本文介绍如何将图片压缩成Zip文件,首先需要下载第三方库ZipArchive 并导入项目中。 ZipArchive 库地址:https://github.com...
  • Lotheve
  • Lotheve
  • 2015-04-11 12:34
  • 1927

ios中Mini zip开源工程ZipArchive,压缩中文文件名乱码问题【解决】

一、首先介绍minizip 的使用方法 ziparchive是基于开源代码”MiniZip”的zip压缩与解压的Objective-C 的Class,使用起来非常的简单 方法:从http://co...
  • hherima
  • hherima
  • 2013-04-10 23:45
  • 5869
    个人资料
    • 访问:82502次
    • 积分:1212
    • 等级:
    • 排名:千里之外
    • 原创:40篇
    • 转载:3篇
    • 译文:0篇
    • 评论:15条
    博客专栏