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

Ced*_*che 27 iphone split nsdata

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

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

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

先感谢您.

Nik*_*uhe 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);
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢!我们也可以使用NSData*chunk = [myBlob subdataWithRange:NSMakeRange(offset,chunkSize)]; (10认同)