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

时间:2011-11-07 17:06:43

标签: iphone objective-c ios memory-management

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

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

通过哪种其他方法,我可以实现同样的目标?

1 个答案:

答案 0 :(得分:11)

使用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];

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