Генерация правильного объекта NSData из потока байтов
Я хочу передавать данные в байтах и на стороне получателя хочу сгенерировать тот же объект NSData обратно. Размер моих данных может постоянно меняться. Я могу определить правильную длину, которая будет использоваться на стороне получателя для генерации того же объекта обратно.
NSDictionary *aWritableFields = @{@"Data1": @"1", @"Data2": @"2", @"Data3": @"3", @"Data4" : @"4"};
NSData *aData = [NSJSONSerialization dataWithJSONObject:aWritableFields options:0 error:nil];
uint32_t *bytes = (uint32_t *)aData.bytes;
На стороне получателя я хочу создать тот же объект NSData обратно. Для этого я использую следующий метод, но это дает мне дополнительную информацию. Как я должен определить длину так, чтобы это дало мне только правильный объект NSData.
[NSData dataWithBytes:iBytes length:sizeof(uint32_t)*24];
Объект данных, который я отправил, был:
<7b225555 4944223a 2231222c 224d696e 6f72223a 2231222c 22506f77 6572223a 2233222c 224d616a 6f72223a 2232227d>
Но на стороне получателя я получаю из-за чрезмерной длины:
<7b225555 4944223a 2231222c 224d696e 6f72223a 2231222c 22506f77 6572223a 2233222c 224d616a 6f72223a 2232227d a3a3a3a3 a3a3a3a3 a3a3a3a3 a3a3a3a3 a3a3a3a3 a3a3a3a3 a3a3a3a3 a3a3a3a3 a3a3a3a3 a3a3a3a3 a3a3a3a3 a3a3a3a3>
1 ответ
Получатель должен знать точное количество байтов. То, как это достигается, зависит от того, какой протокол используется для передачи данных от отправителя к получателю. В случае HTTP это может быть выведено из заголовка Content-Length:. Если вы отправляете только одно сообщение от отправителя к получателю, получатель может посчитать количество байтов до EOF. Или вы передаете количество байтов вместе с фактическими данными.
Но получатель не может определить правильную длину только из чистых байтов.