是否有任何方式来遍历NSData,所以我可以根据特定的字节模式分割它?我需要将某些块分解成一个数组以备后续查找。迭代通过NSData和抓块
2
A
回答
12
要在某个分隔符上拆分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
内的任何优化,避免内存副本。 Apple不承诺进行这种优化,但您可以看到他们正在以这种方式移动dispatch_data
和enumerateByteRangesUsingBlock:
。事实上,你应该尽可能避免使用bytes
(*),因为这会迫使NSData
创建一个连续的范围,它可能会避免到那一点。
欲了解更多信息,请参阅Binary Data Programming Guide。 (请注意,本指南并未针对iOS 7进行更新,也未讨论enumerateByteRangesUsingBlock:
。)
(*)“尽可能”在这里有点强大,因为您不应该让代码变得复杂,如果内存拷贝不会成为问题,请避免拨打bytes
。
相关问题
- 1. 通过NSData字节进行迭代
- 2. 通过NSMutableIndexSet不带有块迭代
- 3. 迭代通过哈希映射'块'
- 4. Matlab:通过图像块迭代
- 5. 通过迭代
- 6. 通过迭代
- 7. 在Python中通过块(n)迭代迭代器?
- 8. 通过#defines迭代
- 9. 迭代通过HashMap
- 10. 迭代通过c#
- 11. 迭代通过组
- 12. 通过迭代iterrows
- 13. 迭代通过JSP
- 14. 迭代通过CompositeCollection
- 15. 迭代通过tensorflow
- 16. 迭代通过MultiSelectList
- 17. 通过DynamicJsonObject迭代
- 18. 迭代通过类
- 19. 迭代通过IHtmlElementCollection
- 20. 迭代通过DS.hasMany
- 21. 通过JEditorPane迭代
- 22. 通过迭代猪
- 23. 迭代通过流
- 24. 迭代通过XML
- 25. 通过hashmap迭代?
- 26. 通过javax.json.JsonArray迭代
- 27. 通过XML迭代?
- 28. 迭代通过JSONObjects
- 29. 通过NSArray迭代
- 30. 通过StringProperty迭代
'getBytes:range:'? –
问题是范围是变量我需要两个字节标记之间的一切。 – user2532233