Можно ли использовать NSInputStream для чтения фрагментов данных со смещением, чтобы иметь возможность загружать большие файлы

Я хотел бы знать, есть ли способ использовать NSInputStream для чтения фрагмента данных с некоторым смещением. Например, есть файл размером 100 МБ, мне нужны фрагменты размером 10 МБ, но мне нужен 5-й фрагмент перед 1-м фрагментом.

Цель состоит в том, чтобы иметь возможность загружать большие файлы на сервер. Бэкэнд ожидает порции данных, которые можно отправить сразу. Идея состоит в том, чтобы использовать NSOperationQueue и установить maxConcurrentOperationCount, например, на 5. Для каждой из задач потребуется отдельный фрагмент для отправки. Я знаю про - (NSData *)subdataWithRange:(NSRange)range - но для этого потребуется, чтобы все NSData все время было в памяти. Что не будет работать с большими файлами, поэтому я бы предпочел использовать NSInputStream. Можно ли читать фрагменты не по порядку с помощью NSInputStream и как или следует использовать другой подход?


person surToTheW    schedule 02.06.2020    source источник


Ответы (1)


Вы можете открыть NSInputStream на основе файла, а затем указать необходимое смещение, используя свойство NSStreamFileCurrentOffsetKey. В то же время, в случае реализации загрузки на NSURLRequiest с NSInputStream внутри, размер чанка не зависит от вас. Его значение жестко запрограммировано в среде CFNetworking.

person Pavel Osipov    schedule 03.06.2020