【问题标题】:Generating the correct NSData object from byte stream从字节流生成正确的 NSData 对象
【发布时间】:2013-08-12 19:41:05
【问题描述】:

我想以字节为单位传输数据,并且在接收方想要生成相同的 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 a3a3a3a3 a3a3a3a3 a3a3a3a3 a3a3a3a3 a3a3a3a3 a3a3a3a3 a3a3a3a3 a3a3a3a3 a3a3a3a3 a3a3a3a3 a3a3a3a3 a3a3a3a3>

【问题讨论】:

    标签: ios objective-c cocoa-touch nsdata uint32


    【解决方案1】:

    接收者必须知道确切的字节数。如何实现取决于 使用哪种协议将数据从发送方传输到接收方。在这种情况下 HTTP,它可以从 Content-Length: 标头中推断出来。如果您只发送一个 从发送方到接收方的消息,接收方可以计算直到 EOF 的字节数。 或者您将字节数与实际数据一起传输。

    但接收方无法仅从纯字节中确定正确的长度。

    【讨论】:

      猜你喜欢
      • 2016-04-23
      • 1970-01-01
      • 2011-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多