zoukankan      html  css  js  c++  java
  • iOS gzip解压

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

    2. 引入头文件

    #import "zlib.h"

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

    -(NSData *)uncompressZippedData:(NSData *)compressedData
    {
        if ([compressedData length] == 0) return compressedData;
        
        unsigned full_length = [compressedData length];
        
        unsigned half_length = [compressedData length] / 2;
        NSMutableData *decompressed = [NSMutableData dataWithLength: full_length + half_length];
        BOOL done = NO;
        int status;
        z_stream strm;
        strm.next_in = (Bytef *)[compressedData bytes];
        strm.avail_in = [compressedData 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];
            }
            // chadeltu 加了(Bytef *)
            strm.next_out = (Bytef *)[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;
        }
    }
    


    使用例子:

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


    參考博客:

    在iPhone开发中实现解压缩gzip


  • 相关阅读:
    qq客服不需要加好友
    mysql中表名为关键字的处理方法
    DIV+CSS最小高度(兼容IE6\IE7\FF)(转载)
    Js%26String添加加+trim()方法
    MS Sql 定期自动备份
    MySQL 中文显示乱码
    SQL Server 2005 中的Row_Number()函数
    Jquery中使用setInterval和setTimeout
    fieldset 居中
    script language="JavaScript" defer
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/6951317.html
Copyright © 2011-2022 走看看