Je ne pense pas essayer d'utiliser toute forme de compression sera efficace, voire une amélioration du tout à cette échelle, parce que tous les algorithmes de compression fonctionnent mieux quand ils ont beaucoup de données pour travailler avec, et donc de nombreux doublons et modèles à trouver. Lorsque la totalité de votre taille de données est de 130 octets, toute forme de compression zip n'est pas vraiment une option viable.
Si votre dictionnaire ne contient que des valeurs de liste des propriétés (tableaux, des dictionnaires, des chaînes, nombres), vous pouvez utiliser sérialisation JSON au lieu de NSKeyedArchiver
:
NSData *JSONData = [NSJSONSerialization dataWithJSONObject:anObject
options:0
error:nil];
Cela rend immédiatement les données de sortie beaucoup plus court dans votre cas:
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 Taille Data = 380 octets, JSON Taille de données = 66 octets
Comme vous pouvez le voir, les données sérialisé JSON est presque 6 fois plus petit que les NSKeyedArchiver
données sérialisés, et se glisse facilement dans votre limite de 130 octets. Et la meilleure chose est, c'est seulement une ligne de code.
MISE À JOUR: Il suffit de se frotter dans un peu plus :), voici les données qui NSKeyedArchiver
produit (ajouté sous forme d'image, car il contient beaucoup de caractères « illégaux » que je ne pouvais pas copier et coller):
Comme vous pouvez le voir, il contient beaucoup de données inutiles que vous avez vraiment pas besoin (surligné en bleu), qui est fondamentalement juste de donner NSKeyedUnarchiver
suffisamment d'informations pour pouvoir désarchiver plus tard.
Maintenant, regardons les données JSON:
{"Value3":"12","Value2":"10","Value1":"sadsadasdasdsadqwwqsadasd"}
Voilà. Une ligne. 66 octets. Parmi ceux-ci, 19 octets ne sont pas vos valeurs. En d'autres termes, 71% de ces données JSON sont vos valeurs, et le reste est un balisage, pour ainsi dire. Pendant ce temps, dans les données NSKeyedArchiver
, vos valeurs constituent, attendez, 12% du résultat. Je pense que vous pouvez clairement voir lequel est le plus efficace pour le stockage ici.
Vérifiez cela. Cela devrait aider. http: // stackoverflow.com/questions/3157356/converting-nsdictionary-object-à-nsdata-object-et-vice-versa –
Vous pouvez essayer de compresser le NSData comme décrit ici: http://stackoverflow.com/a/234099/475052 –
Don Je ne sais pas quelle représentation utilise NSKeyedArchiver - probablement JSON serait plus compact. Dans tous les cas, il n'y aura probablement pas beaucoup de «gaz» dans la représentation, vous devrez donc recourir à la compression de données si vous voulez vraiment regrouper les choses. –