我的视频文件大小约为2GB。此视频文件的标头已加密(大约528字节加密)。为了解密此视频文件,我将文件中的所有字节读入NSData对象。 一旦我将这个文件写入NSData对象,我的应用程序崩溃了(可能是b' coz max-256MB RAM for iPad)。
那么我如何暂时将这个NSData对象存储到iPad / iPhone的虚拟内存中呢?
通过哪种其他方法,我可以实现同样的目标?
答案 0 :(得分:11)
使用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对象。你刚才提到你正在使用它,所以我把它扔进了。