Запись огромных кусков данных в объекты NSData-iOS - PullRequest
7 голосов
/ 07 ноября 2011

У меня есть видеофайл размером около 2 ГБ.Этот заголовок видеофайла зашифрован (зашифровано приблизительно 528 байт).Чтобы расшифровать этот видеофайл, я читаю все байты из файла в объект NSData.Как только я записываю этот файл в объект NSData, происходит сбой моего приложения (возможно, b'coz max-256MB RAM для iPad).

Итак, как мне временно сохранить этот объект NSData в виртуальной памяти iPad / iPhone?

Любой другой подход, с помощью которого я могу добиться того же?

1 Ответ

11 голосов
/ 07 ноября 2011

Используйте NSInputStream для считывания файла по частям, чтобы не загружать все это в память сразу.В частности, вы захотите использовать hasBytesAvailable и read:maxLength:.

Что-то вроде:

NSInputStream *myStream = [NSInputStream inputStreamWithFilAtPath:pathToAbsurdlyLargeFile];
[myStream open];
Byte buffer[BUFFER_SIZE];
while ([myStream hasBytesAvailable])
{
   int bytesRead = [myStream read:buffer maxLength:BUFFER_SIZE];
   NSData *myData = [NSData dataWithBytes:buffer length:bytesRead];
   // do other stuff...
}
[myStream close];

Обратите внимание, что вывозможно, не нужно создавать объект NSData.Вы только что упомянули, что используете его, поэтому я бросил его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...