Подтвердить что ты не робот

Разделить объекты NSData на другие объекты NSData заданного размера

У меня есть объект NSData размером около 1000 КБ. Теперь я хочу передать это через Bluetooth. Было бы лучше, если бы у меня, допустим, 10 объектов 100 КБ. Напомню, что я должен использовать метод -subdataWithRange: NSData.

Я не работал с NSRange. Ну, я знаю, как это работает, но я не могу понять, как читать из заданного места с длиной: "до конца файла"... Я понятия не имею, как это сделать.

Некоторый код о том, как разделить это на несколько объектов NSData размером 100 КБ, действительно поможет мне здесь. (вероятно, это связано с методом -length, чтобы увидеть, сколько объектов должно быть сделано.?)

Спасибо заранее.

4b9b3361

Ответ 1

Следующий фрагмент кода выполняет фрагментацию без копирования данных:

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);

Sidenote: я должен добавить, что объекты chunk нельзя безопасно использовать после того, как myBlob был выпущен (или иным образом изменен). chunk фрагменты указывают на память, принадлежащую myBlob, поэтому не сохраняйте их, если вы не сохраните myBlob.