我知道,出于某些性能原因,对大量的任意二进制数据使用plist或xml并不是一个好主意。
假设我的数据格式是一个数组(一些字符串,一个整数,二进制数据),其中二进制数据的大小超过几兆字节(不固定),数组大小是数百。我希望将所有数据序列化并存储在我的文档目录上的一个文件中,并且只将该文件中的一些数据读取到内存中。因此,我最初认为使用plist是实现需求的一种方法,但如上所述,这不是一种好方法。
避免这个问题的一种方法是使用二进制数据的路径而不是二进制数据,然后我可以使用Core data或类似的数据。但是,这并不能满足要求。
我花了几天的时间找到一个合适的框架,似乎没有一个。在我的例子中,我应该构建自己的编码和解码方法吗?NSArchiving足以满足我的需求吗?
发布于 2012-02-10 00:56:28
NSCoding实际上只是创建了一个二进制Plist,所以性能会很相似(当你构建的时候,你的应用程序中嵌入的XML Plist会被转换成二进制)。
(仅供参考,如果您将.plist放在NSCoded文件的末尾,您可以在Plist编辑器中打开它并查看所有属性,尽管其内容并不像常规的plist那样真正可读)。
Plist的速度非常快--对于一个几MB大小的文件来说可能已经足够快了。你真的试过只使用Plist来做这个吗?
另一种选择是使用JSON文件并使用JSONKit加载它。JSONKit已经对其性能进行了基准测试,其加载速度甚至比二进制plist更快:http://www.cocoanetics.com/2011/03/json-versus-plist-the-ultimate-showdown/
如果这仍然不够快,下一个最好的选择是将其存储在SQLLite数据库中,尽管这需要更多的工作。数据库通常更适合于只加载文件的一部分,因为您不必将整个文件加载到内存中,只需获取所需的部分即可。
发布于 2012-02-10 00:32:31
您不希望使用XML或文本列表。我想我会先试试NSCoding & friends,看看Archives and Serialization Guide。但如果您真的需要将整个内容存储到一个文件中,然后只读取其中的一部分,我认为您可以自己完成。数据库怎么样?
https://stackoverflow.com/questions/9214719
复制相似问题