iOS网路传输zip压缩

来源:互联网 发布:淘宝 之小姐 假货 豆瓣 编辑:程序博客网 时间:2024/05/08 11:27

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
原创粉丝点击