我在为 iPhone 应用程序生成数据的 Mac OS X 程序中使用 NSKeyedArchiver。我发现默认情况下,生成的档案比我预期的要大得多。例子:
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 字节的有用数据,但结果文件的大小几乎是 3 兆字节。开销似乎随着数组中项目的数量而增长。在这种情况下,对于 1000 个项目,文件大约为 22k。
“file”报告它是“Apple 二进制属性列表”(不是 XML 格式)。
有没有一种简单的方法可以防止这种巨大的开销?我想使用 NSKeyedArchiver 因为它提供的简单性。我可以将数据写入我自己的非通用二进制格式,但这不是很优雅。此外,将数据聚合成大块并将它们提供给 NSKeyedArchiver 应该可以工作,但同样,这有点超过了使用简单&easy&ready to use archiver 的意义。我是否错过了一些可以减少这种开销的方法调用或使用模式?