接收到服务器传给我的压缩后的字段是加密的 我先用GTMBase64解密后再解压,结果解不出来,截了一段数据,我贴下代码:
NSString *content = @"UEsDBBQACAAIAKV7IUUAAAAAAAAAAAAAAAABAAAAMKtWKkotLs0pUbIy0FFKSSxJVLKKjq0FAFBL\nBwiASTAgGAAAABYAAAA=";
NSData *datacontent = [GTMBase64 decodeString:content];
NSData *dataUncompresss = [LFCGzipUtillity uncompressZippedData:datacontent];dataUncompresss得到null。泪奔~~~datacontent = <504b0304 14000800 0800a57b 21450000 00000000 00000000 00000100 000030ab 562a4a2d 2ecd2951 b232d051 4a492c49 54b28a8e ad050050 4b070880 49302018 00000016 000000>
content对应解压出来的数据应该是{"result":0,"data":[]}
然后我又将{"result":0,"data":[]}本地压缩得到的是<1f8b0800 00000000 0003ab56 2a4a2d2e cd2951b2 32d0514a 492c4954 b28a8ead 05008049 30201600 0000>,和服务器给我的datacontent数据不一样有木有~~~
求大神支招啊~~
NSString *content = @"UEsDBBQACAAIAKV7IUUAAAAAAAAAAAAAAAABAAAAMKtWKkotLs0pUbIy0FFKSSxJVLKKjq0FAFBL\nBwiASTAgGAAAABYAAAA=";
NSData *datacontent = [GTMBase64 decodeString:content];
NSData *dataUncompresss = [LFCGzipUtillity uncompressZippedData:datacontent];dataUncompresss得到null。泪奔~~~datacontent = <504b0304 14000800 0800a57b 21450000 00000000 00000000 00000100 000030ab 562a4a2d 2ecd2951 b232d051 4a492c49 54b28a8e ad050050 4b070880 49302018 00000016 000000>
content对应解压出来的数据应该是{"result":0,"data":[]}
然后我又将{"result":0,"data":[]}本地压缩得到的是<1f8b0800 00000000 0003ab56 2a4a2d2e cd2951b2 32d0514a 492c4954 b28a8ead 05008049 30201600 0000>,和服务器给我的datacontent数据不一样有木有~~~
求大神支招啊~~
+(NSData *)uncompressZippedData:(NSData *)data {
if ([data length] == 0) return data;
unsigned full_length = [data length];
unsigned half_length = [data length] / 2;
NSMutableData *decompressed = [NSMutableData dataWithLength: full_length + half_length];
BOOL done = NO;
int status;
z_stream strm;
strm.next_in = (Bytef *)[data bytes];
strm.avail_in = [data 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;
}
你需要先进行base64解码,然后解压。建议你跟android开发方面或是服务器端的人一起调试下,一步步来,譬如说,先解码,看看跟android端解码后的数据是否一致。然后再看看解压的数据。