带有gzipDeflate的iOS zip

时间:2012-05-16 09:31:11

标签: iphone ios5 gzip

我正在使用NSData + compression.h和Base64Transcoder.h元素来压缩和解压缩内容。

基本上解压缩服务器响应。

解压缩方法完美无缺

+ (NSString *) unzip: (NSString*) stringValue{
    Byte inputData[[stringValue lengthOfBytesUsingEncoding:NSUTF8StringEncoding]];
    [[stringValue dataUsingEncoding:NSUTF8StringEncoding] getBytes:inputData];
    size_t inputDataSize = (size_t)[stringValue length];
    size_t outputDataSize = EstimateBas64DecodedDataSize(inputDataSize);
    Byte outputData[outputDataSize];//prepare a Byte[] for the decoded data
    Base64DecodeData(inputData, inputDataSize, outputData, &outputDataSize);
    NSData *theData = [[NSData alloc] initWithBytes:outputData length:outputDataSize];

    //And now we gunzip:
    NSData* result = [theData gzipInflate];//make bigger==gunzip

    NSString *temp = [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding];

    return temp;
}

但是当我尝试使用simetric方式压缩内容时,gzipDeflate会失败,并返回一个空值或零值。

这是我的邮政编码

+ (NSData *) zip:(NSData *) theSourceData {
    // And now we zip:
    NSData *result = [theSourceData gzipDeflate];

    Byte inputData[[result length]];
    [result getBytes:inputData];
    size_t inputDataSize = (size_t)[result length];
    size_t outputDataSize = EstimateBas64DecodedDataSize(inputDataSize);
    char outputData[outputDataSize];//prepare a Byte[] for the decoded data
    Base64EncodeData(inputData, inputDataSize, outputData, &outputDataSize, NO);

    NSData *theData = [[NSData alloc] initWithBytes:outputData length:outputDataSize];

    return theData;
}

有什么建议吗?

由于

1 个答案:

答案 0 :(得分:0)

问题出在Base64编码器上。

+ (NSString *) zip:(NSData *) theSourceData {

    // And now we zip:
    NSData *result = [theSourceData gzipDeflate];
    NSString *source = [NSString base64StringFromData:result length:[result length]];

    return source;
}

我们已经集成了base64StringFromData:length:方法来解决它。

谢谢,

伊万