是否有任何方式來遍歷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