我正在向我的服务器发送一个请求,该服务器正在传回一堆包含未压缩的头信息的数据,然后请求使用zlib压缩的数据。zlib数据不解压
所以数据的整个负载看起来像
(报头(未压缩)/数据(压缩)/结束)
该数据未曾被压缩之前,因此这是我如何在那里获取信息
cstring = (char *) malloc(sizeWithLocalOrdering + 1);
strncpy(cstring, bytes, sizeWithLocalOrdering);
cstring[sizeWithLocalOrdering] = '\0';
NSString *resultString = [NSString stringWithCString:cstring encoding:NSUTF8StringEncoding];
methodResponseData =[resultString dataUsingEncoding:NSUTF8StringEncoding];
sizeWithLocalOrdering有多大的数据部分,所以我可以从我的全部接收地的数据正确读取来自服务器。
但是现在我正在接收Zlib数据..我想知道如何将数据部分从Im发送而不破坏zlib压缩...因为目前当我将MethodResponseData提供给我的解压方法showen下面
- (NSData*) dataByDecompressingData:(NSData*)data{
NSLog(@"%@", data);
Byte* bytes = (Byte*)[data bytes];
NSInteger len = [data length];
NSMutableData *decompressedData = [[NSMutableData alloc] initWithCapacity:COMPRESSION_BLOCK];
Byte* decompressedBytes = (Byte*) malloc(COMPRESSION_BLOCK);
z_stream stream;
int err;
stream.zalloc = (alloc_func)0;
stream.zfree = (free_func)0;
stream.opaque = (voidpf)0;
stream.next_in = bytes;
// err = inflateInit(&stream);
err = inflateInit2(&stream, -MAX_WBITS);
CHECK_ERR(err, @"inflateInit");
while (true) {
stream.avail_in = len - stream.total_in;
stream.next_out = decompressedBytes;
stream.avail_out = COMPRESSION_BLOCK;
err = inflate(&stream, Z_NO_FLUSH);
[decompressedData appendBytes:decompressedBytes length:(stream.total_out-[decompressedData length])];
if(err == Z_STREAM_END)
break;
CHECK_ERR(err, @"inflate");
}
err = inflateEnd(&stream);
CHECK_ERR(err, @"inflateEnd");
free(decompressedBytes);
return decompressedData;
}
它说的数据..和我挑衅发送methodReasponse对面即是挑衅的NSData ......所以唯一的原因,我可以把它归结为是这样的,因为我的接收机的方法,把数据的从像我这样的回应。
所以有两件事,你认为这是为什么?其次,你如何认为我可以修复数据,所以它实际上是NSData,而压缩仍然存在,所以我可以用我的方法进行解压缩。