【发布时间】:2011-10-09 20:07:45
【问题描述】:
这可能很容易。我正在使用 GCDAsyncSocket 从服务器接收可变数量的字节,这些字节表示 NSMutableData 对象中出现的离散数据块。
如果数据是单词,它可能看起来像这样:
ChunkChunkChunkChu
nkChunkChunkChunkCh
所以在处理了三个块之后,部分块“Chu”仍然存在并且必须保留,以便下一批数据可以竞争该块。
现在的处理流程是这样的:
receive data, appending to myBuffer
process contents of buffer up to last complete chunk
create new myBuffer with partial fragment of remaining data chunk at end of buffer
back to the start
这很好用,但我不确定这是否是最有效的方法。我看到 NSMutableData 有一个 replaceBytesInRange ,我可以使用它从缓冲区的开头删除已处理的字节数,但它是reportedly a slow operation。
对最好的方法有什么建议吗?如果它有所作为,我正在使用 ARC,所以我希望减少创建/释放的开销。
【问题讨论】:
-
如果你的离散数据块是分隔的,你有什么理由不能使用
-[GCDAsyncSocket readDataToData:withTimeout:tag]? -
块的种类繁多,因此没有任何方便的分隔符。处理数据的状态机决定了块的结束位置,因此确实有必要尽可能多地抓取。
标签: ios nsmutabledata