3

我想将视频文件加载到 NSData 中,如果我使用 dataWithContentsOfFile:,当文件太大时它会消耗大量内存。如何获取具有偏移量和长度的文件的特定数据。我需要分段上传视频文件。

4

3 回答 3

1

NSData *data = [NSData dataWithContentsOfMappedFile:<path>];
NSRange first4k = {0, MIN([data length], 4096)};
return [data subdataWithRange:first4k];

只为您提供文件的前 4k,而无需加载所有文件。

但是 dataWithContentsOfMappedFile: 在 iOS5 中已被弃用。

我想 - 警告:未经测试!-

+ (id)dataWithContentsOfURL:(NSURL *)aURL options:(NSDataReadingOptions)mask error:(NSError **)errorPtr

掩码设置为

NSDataReadingMappedIfSafe

或者

NSDataReadingMappedAlways

也应该做这项工作。

但是,这在 iOS5 中是新的。

于 2012-05-16T08:47:33.287 回答
1

您可以使用NSFileHandle然后使用 seekToFileOffset: 搜索并使用readDataOfLength :读取数据块。

于 2012-05-16T08:54:12.400 回答
0

这是一篇可能对Cocoa is my Girlfriend有帮助的文章

几周前,Matt Long 遇到了一个应用程序内存不足的问题。他有一个巨大的数据文件需要加载和处理,而内存占用超出了应用程序的承受能力。它可以很好地加载到 NSData 中,但在他完成之前,应用程序会因内存不足而死机。

于 2013-02-12T16:57:48.297 回答