将大量数据写入NSData对象-iOS

Pra*_*wal 7 iphone memory-management objective-c ios

我有一个大约2GB的视频文件.此视频文件的标头已加密(大约528字节加密).为了解密这个视频文件,我正在将文件中的所有字节读入NSData对象.一旦我将这个文件写入NSData对象,我的应用程序崩溃了(可能是b'co​​z max-256MB RAM for iPad).

那么我如何暂时将这个NSData对象存储到iPad/iPhone的虚拟内存中呢?

通过哪种方式我可以达到同样的目的?

Sam*_*Sam 11

使用a NSInputStream逐个读入文件,这样你就不会一次性将它全部加载到内存中.具体来说,你会想要使用hasBytesAvailableread: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];
Run Code Online (Sandbox Code Playgroud)

请注意,您可能不需要创建NSData对象.你刚才提到你正在使用它,所以我把它扔进去了.