我有一个大约2 2GB大小的视频文件。该视频文件的头部被加密(大约528字节加密)。为了解密这个视频文件,我将文件中的所有字节读取到一个NSData对象中。一旦我将这个文件写入NSData对象,我的应用程序就会崩溃(对于iPad,可能是b‘’coz max-256MB内存)。
那么我该如何将这个NSData对象临时存储到iPad/ iPhone的虚拟内存中呢?
有没有其他方法可以让我达到同样的目的?
发布于 2011-11-08 01:17:15
使用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对象。你刚提到你在用它,所以我就把它扔进去了。
https://stackoverflow.com/questions/8039908
复制相似问题