Я делаю запрос на свой сервер, который возвращает кучу данных, содержащих несжатую информацию заголовка, а затем запрошенные данные, которые должны быть сжаты с использованием 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. Я хотел бы знать, как мне получить часть данных из материала, который я отправляю, не нарушая сжатия zlib... потому что в настоящее время, когда я передаю MethodResponseData в мой метод декомпрессии, показанный ниже
- (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;
}
он говорит, что Data is .. и я демонстративно отправляю methodReasponse через это демонстративно NSData ... поэтому единственная причина, по которой я могу свести это к этому, заключается в том, что мой метод получателя извлекает данные из ответа, как и я.
Итак, две вещи. Как вы думаете, это причина для ? и, во-вторых, как, по-вашему, я могу исправить данные, чтобы на самом деле это были NSData, и сжатие все еще было, поэтому я могу распаковать с помощью моего метода.