Я не думаю, что попытки использовать какую-либо форму сжатия будут эффективными или даже улучшат вообще в этом масштабе, потому что все алгоритмы сжатия работают лучше всего, когда у них есть много данных для работы, и, следовательно, много дубликатов и шаблонов для поиска. Когда весь размер ваших данных составляет 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 почти в 6 раз меньше, чем сериализованные данные NSKeyedArchiver
, и легко умещаются в 130 байт. И самое лучшее, это всего лишь одна строка кода.
ОБНОВЛЕНИЕ: просто чтобы еще немного втереть :), вот данные, которые создает NSKeyedArchiver
(добавлено как изображение, потому что оно содержит много «недопустимых» символов, которые я не мог скопировать и вставить):
Как вы можете видеть, он содержит много бесполезных данных, которые вам на самом деле не нужны (выделены синим цветом), это в основном только для того, чтобы предоставить NSKeyedUnarchiver
достаточно информации, чтобы иметь возможность разархивировать ее позже.
Теперь давайте посмотрим на данные JSON:
{"Value3":"12","Value2":"10","Value1":"sadsadasdasdsadqwwqsadasd"}
Вот и все. Одна линия. 66 байт. Из них 19 байтов не являются вашими значениями. Другими словами, 71% этих данных JSON — это ваши значения, а остальное — это, так сказать, разметка. Между тем, в данных NSKeyedArchiver
ваши значения составляют, подождите, 12% результата. Я думаю, вы можете ясно видеть, какой из них более эффективен для хранения здесь.
person
Greg
schedule
14.07.2013
@
.) - person Hot Licks   schedule 14.07.2013