0

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 は失敗し、空または nil 値を返します。

これは私の郵便番号です

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

助言がありますか?

ありがとう

4

1 に答える 1

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: メソッドを統合しました。

ありがとう、

イヴァン

于 2012-05-18T08:39:19.880 に答える