`

iphone客户端解压gzip

 
阅读更多

 

-(NSData *)uncompressZippedData:(NSData *)compressedData  //解压缩gzip

{  

 

    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];  

        }  

        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;  

    }  


----------
调用

NSString *path = [[NSBundle mainBundle] pathForResource:@"Document.pdf.gz" ofType:nil];

 

NSData *zipData = [NSData dataWithContentsOfFile:path];

NSData *pdfData = [self uncompressZippedData:zipData];

//获得document目录

NSArray *docpath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *pathname = [docpath objectAtIndex:0];

NSString *pdfPathname =  [pathname stringByAppendingPathComponent:@"1.pdf"];

[pdfData writeToFile:pdfPathname atomically:YES];


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics