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

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

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

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

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

27
задан Cedric Vandendriessche 29 April 2017 в 13:56
поделиться

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

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

37
ответ дан 28 November 2019 в 05:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: