有什么方法可以迭代 NSData 以便我可以根据特定的字节模式拆分它?我需要将某些块分解成一个数组以便以后查找。
拆分一个NSData
在某些分隔符上,您可以使用以下命令搜索分隔符rangeOfData:options:range:
然后使用分割subdataWithRange:
。例如(基于我当前正在处理的一些代码,但我还没有测试这个特定的块):
NSRange range = [data rangeOfData:delimiter
options:0
range:NSMakeRange(0, data.length)];
if (range.location != NSNotFound) {
size_t body_offset = NSMaxRange(range);
size_t body_size = data.length - body_offset;
NSData *bodyData = [data subdataWithRange:NSMakeRange(body_offset, body_size)];
...
}
此示例搜索delimiter
并分配bodyData
之后的所有字节。您可以编写类似的代码来拆分内容并将它们添加到数组中,或者您喜欢的任何内容。
与您自己的方案相比,该方案的一个优点是您将受益于内部的任何优化NSData
避免内存复制。苹果不承诺进行此类优化,但你可以看到他们正在朝着这个方向发展dispatch_data
and enumerateByteRangesUsingBlock:
。事实上,你应该避免bytes
只要有可能 (*),因为这会迫使NSData
创建一个连续的范围,到目前为止它可能已经避免了。
有关更多信息,请参阅二进制数据编程指南。 (请注意,本指南尚未针对 iOS 7 进行更新,并且不讨论enumerateByteRangesUsingBlock:
.)
(*)“只要可能”在这里有点强,因为您不应该仅仅为了避免调用而使代码变得不必要的复杂bytes
如果内存副本不会成为问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)