Разделить объекты NSData на другие объекты NSData данного размера - PullRequest
27 голосов
/ 24 мая 2010

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

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

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

Заранее спасибо.

1 Ответ

37 голосов
/ 24 мая 2010

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

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: Я должен добавить, что объекты чанка нельзя безопасно использовать после того, как myBlob был освобожден (или изменен иным образом),chunk фрагменты указывают на память, принадлежащую myBlob, поэтому не сохраняйте их, пока не сохраните myBlob.

...