您好,欢迎来到微智科技网。
搜索
您的当前位置:首页gzip

gzip

来源:微智科技网
// Created by iexin on 11-4-6.

// Copyright 2011 __MyCompanyName__. All rights reserved. //

#import #import \"zlib.h\"

@interface LFCGzipUtility : NSObject { }

+(NSData*) gzipData: (NSData*)pUncompressedData; @end

//-------------------------------------------------------------

// Created by iexin on 11-4-6.

// Copyright 2011 __MyCompanyName__. All rights reserved. //

#import \"LFCGzipUtility.h\"

@implementation LFCGzipUtility

+(NSData*) gzipData: (NSData*)pUncompressedData { if (!pUncompressedData || [pUncompressedData length] == 0) { NSLog(@\"%s: Error: Can't compress an empty or null NSData object.\", __func__); return nil; } z_stream zlibStreamStruct; zlibStreamStruct.zalloc= Z_NULL; // Set zalloc, zfree, and opaque to Z_NULL so zlibStreamStruct.zfree= Z_NULL; // that when we call deflateInit2 they will be zlibStreamStruct.opaque= Z_NULL; // updated to use default allocation functions zlibStreamStruct.total_out = 0; // Total number of output bytes produced so far zlibStreamStruct.next_in= (Bytef*)[pUncompressedData bytes]; // Pointer to input bytes zlibStreamStruct.avail_in= [pUncompressedData length]; // Number of input bytes left to process int initError = deflateInit2(&zlibStreamStruct, Z_DEFAULT_COMPRESSION, Z_DEFLATED, (15+16), 8, Z_DEFAULT_STRATEGY); if (initError != Z_OK) { NSString *errorMsg = nil; switch (initError) { case Z_STREAM_ERROR: errorMsg = @\"Invalid parameter passed in to function.\"; break; case Z_MEM_ERROR: errorMsg = @\"Insufficient memory.\";

break; case Z_VERSION_ERROR: errorMsg = @\"The version of zlib.h and the version of the library linked do not match.\"; break; default: errorMsg = @\"Unknown error code.\"; break; } NSLog(@\"%s: deflateInit2() Error: \\\"%@\\\" Message: \\\"%s\\\"\", __func__, errorMsg, zlibStreamStruct.msg); [errorMsg release]; return nil; } NSMutableData *compressedData = [NSMutableData

dataWithLength:[pUncompressedData length] * 1.01 + 12]; int deflateStatus; do { // Store location where next byte should be put in next_out zlibStreamStruct.next_out = [compressedData mutableBytes] + zlibStreamStruct.total_out; zlibStreamStruct.avail_out = [compressedData length] - zlibStreamStruct.total_out; deflateStatus = deflate(&zlibStreamStruct, Z_FINISH); } while ( deflateStatus == Z_OK ); // Check for zlib error and convert code to usable error message if appropriate if (deflateStatus != Z_STREAM_END) { NSString *errorMsg = nil; switch (deflateStatus) { case Z_ERRNO: errorMsg = @\"Error occured while reading file.\"; break; case Z_STREAM_ERROR: errorMsg = @\"The stream state was inconsistent (e.g., next_in or next_out was NULL).\"; break; case Z_DATA_ERROR: errorMsg = @\"The deflate data was invalid or incomplete.\"; break; case Z_MEM_ERROR: errorMsg = @\"Memory could not be allocated for processing.\"; break; case Z_BUF_ERROR: errorMsg = @\"Ran out of output buffer for writing compressed bytes.\"; break; case Z_VERSION_ERROR: errorMsg = @\"The version of zlib.h and the version of the library linked do not match.\"; break; default: errorMsg = @\"Unknown error code.\"; break; }

NSLog(@\"%s: zlib error while attempting compression: \\\"%@\\\" Message: \\\"%s\\\"\", __func__, errorMsg, zlibStreamStruct.msg); [errorMsg release]; deflateEnd(&zlibStreamStruct); return nil; } // Free data structures that were dynamically created for the stream. deflateEnd(&zlibStreamStruct); [compressedData setLength: zlibStreamStruct.total_out]; NSLog(@\"%s: Compressed file from %d KB to %d KB\", __func__, [pUncompressedData length]/1024, [compressedData length]/1024); return compressedData; } @end

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务