2012-05-16 2 views
0

Я использую NSData + compression.h и элементы Base64Transcoder.h, чтобы иметь возможность распаковывать и распаковывать содержимое.iOS zip с gzipDeflate

В основном, чтобы разархивировать ответы сервера.

Метод распакуйте отлично работает

+ (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; 
} 

Любые предложения?

Thanks

ответ

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: метод для его решения.

Спасибо,

Иван

Смежные вопросы