将NSData对象拆分为给定大小的其他NSData对象

时间:2010-05-24 17:47:36

标签: iphone split nsdata

我有一个大约1000kB的NSData对象。现在我想通过蓝牙传输。如果我拥有10个100kB的物体,那会更好。我想到我应该使用NSData的-subdataWithRange:方法。

我还没有真正使用过NSRange。好吧,我知道它是如何工作的,但我无法弄清楚如何从一个给定位置读取长度:'到文件末尾'......我不知道该怎么做。

有关如何将其拆分为多个100kB NSData对象的一些代码将真正帮助我。 (它可能涉及-length方法来查看应该制作多少个对象..?)

提前谢谢。

1 个答案:

答案 0 :(得分:37)

以下代码片段在不复制数据的情况下进行分段:

NSData* myBlob;
NSUInteger length = [myBlob length];
NSUInteger chunkSize = 100 * 1024;
NSUInteger offset = 0;
do {
    NSUInteger thisChunkSize = length - offset > chunkSize ? chunkSize : length - offset;
    NSData* chunk = [NSData dataWithBytesNoCopy:(char *)[myBlob bytes] + offset
                                         length:thisChunkSize
                                   freeWhenDone:NO];
    offset += thisChunkSize;
    // do something with chunk
} while (offset < length);

旁注:我应该补充说,在myBlob被释放(或以其他方式修改)之后,无法安全地使用块对象。 chunk个分段指向myBlob拥有的内存,因此除非您保留myBlob,否则不要保留它们。