我认为尝试使用任何形式的压缩都不会有效,甚至在这种规模上根本不会有所改进,因为所有压缩算法在有大量数据需要处理时效果最好,因此有很多重复和模式寻找。当您的整个数据大小为 130 字节时,任何形式的 zip 压缩都不是真正可行的选择。
如果您的字典将只包含属性列表值(数组、字典、字符串、数字),那么您可以使用 JSON 序列化而不是NSKeyedArchiver
:
NSData *JSONData = [NSJSONSerialization dataWithJSONObject:anObject
options:0
error:nil];
在您的情况下,这会立即使输出数据更短:
NSDictionary *aDict = @{ @"Value1": @"sadsadasdasdsadqwwqsadasd",
@"Value2": @"10",
@"Value3": @"12" };
NSData *aData = [NSKeyedArchiver archivedDataWithRootObject:aDict];
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:aDict
options:0
error:nil];
NSLog(@"NSKeyedArchiver Data Size = %@, JSON Data Size = %@",
[NSByteCountFormatter stringFromByteCount:aData.length
countStyle:NSByteCountFormatterCountStyleFile],
[NSByteCountFormatter stringFromByteCount:jsonData.length
countStyle:NSByteCountFormatterCountStyleFile]
);
NSKeyedArchiver 数据大小 = 380 字节,JSON 数据大小 = 66 字节
如您所见,JSON 序列化数据几乎比NSKeyedArchiver
序列化数据小 6 倍,并且很容易满足 130 字节的限制。最好的是,它只有一行代码。
更新:只是为了更进一步:),这是NSKeyedArchiver
产生的数据(添加为图像,因为它包含很多我无法复制和粘贴的“非法”字符):
如您所见,它包含许多您并不真正需要的无用数据(突出显示为蓝色),这基本上只是为了提供NSKeyedUnarchiver
足够的信息以便以后能够取消归档。
现在,让我们看一下 JSON 数据:
{"Value3":"12","Value2":"10","Value1":"sadsadasdasdsadqwwqsadasd"}
而已。一条线。66 字节。其中,19 个字节不是您的值。换句话说,71%的 JSON 数据是您的值,其余的是标记,可以这么说。同时,在NSKeyedArchiver
数据中,您的值占结果的12%。我想你可以清楚地看到这里的存储效率更高。