这可能是一件容易的事。我正在使用 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 ,我可以用它来从缓冲区的开头删除已处理的字节数,但据报道它是一个缓慢的操作。
关于最好的方法有什么建议吗?如果它有所作为,我正在使用 ARC,所以我希望减少创建/释放的开销。