我想将视频文件加载到NSData中,如果我使用dataWithContentsOfFile :,当文件太大时会占用大量内存。 如何获取具有偏移量和长度的文件的特定数据。 我需要将视频文件分段上传。
答案 0 :(得分:1)
此
NSData *data = [NSData dataWithContentsOfMappedFile:<path>];
NSRange first4k = {0, MIN([data length], 4096)};
return [data subdataWithRange:first4k];
只提供文件的前4k而不加载所有文件。
但是在iOS5中不推荐使用dataWithContentsOfMappedFile:
我想 - 警告:未经测试! -
+ (id)dataWithContentsOfURL:(NSURL *)aURL options:(NSDataReadingOptions)mask error:(NSError **)errorPtr
将掩码设置为
NSDataReadingMappedIfSafe
或
NSDataReadingMappedAlways
也应该完成这项工作。
Butn在iOS5中是新的。
答案 1 :(得分:1)
您可以使用NSFileHandle然后使用seekToFileOffset:进行搜索,并使用readDataOfLength:读取大量数据。
答案 2 :(得分:0)
这篇文章可能有助于Cocoa is my Girlfriend
几个星期前,Matt Long在应用程序内存不足时出现问题。他有一个他需要加载和处理的巨大数据文件,而且内存命中率超过了应用程序所能承受的程度。它可以很好地加载到NSData中,但在他完成它之前,应用程序会缺少内存并死掉。