0

我知道出于某些性能原因,将 plist 或 xml 用于大量任意二进制数据并不是一个好主意。

假设我的数据格式是一个数组(一些字符串,一个整数,二进制数据),其中二进制数据的大小超过几兆字节(不固定),并且数组大小是数百个。我想将整个数据序列化并将其存储在我的 Documents 目录上的一个文件中,并仅将其中一些从该文件读取到内存中。所以,我首先认为使用 plist 是一种实现需求的方法,但如上所述,这不是一个好方法。

避免该问题的一种方法是使用二进制数据的路径而不是二进制数据,然后我可以使用 Core Data 或类似的东西。但是,那并不能满足要求。

找了几天合适的框架,好像没有。我应该建立自己的编码和解码方法吗?NSArchiving 是否足以满足我的要求?

4

2 回答 2

1

NSCoding 实际上只是创建了一个二进制 Plist,因此性能将是相似的(嵌入在您的应用程序中的 XML Plist 在您构建时会转换为二进制)。

(仅供参考,如果您使用 NSCoded 文件并将 .plist 放在末尾,您可以在 Plist 编辑器中打开它并查看所有属性,尽管内容不像常规 plist 那样真正人类可读),

Plists 非常快——对于一个几 MB 大小的文件来说可能已经足够快了。您是否真的尝试过为此使用 Plist?

另一种选择是使用 JSON 文件并使用 JSONKit 加载它。JSONKit 已经将它们的性能基准测试为比二进制 plist 加载速度更快:http: //www.cocoanetics.com/2011/03/json-versus-plist-the-ultimate-showdown/

如果这仍然不够快,那么下一个最佳选择是将其存储在 SQLLite 数据库中,尽管这需要更多的工作。数据库通常更适合仅加载文件的一部分,因为您不必将整个文件加载到内存中,您只需获取所需的部分即可。

于 2012-02-09T16:56:28.250 回答
0

您不想使用 XML 或文本 Plist。我想我会NSCoding先尝试和朋友一起,请参阅档案和序列化指南。但是,如果您真的需要将整个内容存储到一个文件中,然后只读取其中的一部分,我认为您只能靠自己了。数据库怎么样?

于 2012-02-09T16:32:31.217 回答