我正在Mac OS X程序中使用NSKeyEdarachiver,该程序为iPhone应用程序生成数据。我发现默认情况下,生成的档案比我预期的要大得多。例子:

NSMutableArray * ar = [NSMutableArray arrayWithCapacity:10];

for (int i = 0; i < 100000; i++) {
    NSString * s = [NSString stringWithFormat:@"item%06d", i];
    [ar addObject:s];
}
[NSKeyedArchiver archiveRootObject:ar toFile: @"NSKeyedArchiver.test"];

该存储10 * 100000 = 1M字节有用的数据,但所得文件的大小几乎为三兆字节。阵列中的项目数量似乎正在增长。在这种情况下,对于1000个项目,该文件约为22k。

“文件”报告是“ Apple二进制属性列表”(不是XML格式)。

有没有一种简单的方法来防止这种巨大的开销?我想为其提供的简单性使用NSKeyEdarachiver。我可以用自己的,非传播的二进制格式编写数据,但这不是很优雅。另外,将数据汇总到大块中并将其馈送到Nskeyedarachiver应该起作用,但是再次,这种方法击败了使用简单易用且准备使用Archiver的点。我是否缺少一些可以减少此开销的方法或使用模式?

有帮助吗?

解决方案

我提出了一个错误来跟踪这一点。

除此之外,NSKeyEdarachiver是为归档对象网络而设计的。例如,如果一个对象在图中出现两次,则在不合格的情况下,您仍然会发现这种情况。您可能会看到这种唯一的开销。

对于分层结构化数据而不是任意对象网络,请尝试NSPropopertylisterialization。我看到1.8MB的二进制文件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top