核心数据和大文件下载

Posted

技术标签:

【中文标题】核心数据和大文件下载【英文标题】:Core data and large files downloads 【发布时间】:2012-04-19 20:43:05 【问题描述】:

我将一些 PDF 存储到 NSManagedObject 类型为 NSData 的属性中。我已经为该属性设置了“使用外部存储”,它工作得很好。我遇到的问题是,当 PDF 非常大时,应用程序会因为内存不足而崩溃。有没有办法将数据块直接保存到磁盘?我已经使用了refreshObject:mergeChanges:,但即便如此,我必须将数据保存到内存中,直到完整下载完成(只有这样我才能调用refreshObject:mergeChanges:)来故障属性并释放我的内存。当然,对于大型文档来说,为时已晚,在我有机会这样做之前它就崩溃了。

【问题讨论】:

【参考方案1】:

我想如果我处于你的位置,我会获取传入的 PDF 文件 NSInputStream 并使用 NSOutputStream 将其直接写入磁盘。

至于核心数据,我认为不适合用于您不打算完全放入内存的文件; Apple 没有为我们提供从通过核心数据保存到磁盘的文件中获取 NSInputStream 的选项(无论如何我都知道)。在这种情况下,我只需将文件的位置保存在核心数据中,并在该文件路径出错后,从该保存的路径创建一个NSInputStream

它的抽象程度比大多数开发人员喜欢的要低一些,但最好控制任何可能导致内存不足崩溃的东西。

【讨论】:

为什么我被否决了?如果我错了,请有人纠正我。

以上是关于核心数据和大文件下载的主要内容,如果未能解决你的问题,请参考以下文章

如何从文件系统发送包含 json 字符串和大文件的多部分数据的 HTTP 请求?

Linux内存管理和大文件

云计算和大数据的方向以及发展前景如何

用读写分离与分表分库解决高访问量和大数据量

带有管道和大文件的 Python 子进程

swift Swift - CloudKit - 图像和大文件(资产)