J'ai un ArrayList
d'objets en cours de vidage vers une chaîne YAML et j'ai comparé les performances de JYaml et SnakeYaml dans la gestion de cela.JYaml: objet de vidage sans inclure le nom de classe
ArrayList<HashMap> testList = new ArrayList<HashMap>();
HashMap<String, String> testMap1 = new HashMap<String, String>();
HashMap<String, String> testMap2 = new HashMap<String, String>();
testMap1.put("1_1", "One");
testMap1.put("1_2", "Two");
testMap1.put("1_3", "Three");
testMap2.put("2_1", "One");
testMap2.put("2_2", "Two");
testMap2.put("2_3", "Three");
testList.add(testMap1);
testList.add(testMap2);
System.out.println(jYaml.dump(testList));
System.out.println(snakeYaml.dump(testList));
La sortie de JYaml comprend le nom de la classe d'objet sérialisé alors que la sortie de SnakeYaml ne:
sortie JYaml:
- !java.util.HashMap
1_1: One
1_3: Three
1_2: Two
- !java.util.HashMap
2_1: One
2_2: Two
2_3: Three
sortie SnakeYaml:
- {'1_1': One, '1_3': Three, '1_2': Two}
- {'2_1': One, '2_2': Two, '2_3': Three}
Je préfère la sortie sans nom de SnakeYaml, plus «propre», car cela serait plus approprié pour un environnement neutre. Je préfère la vitesse de JYaml. Les temps de sérialisation/désérialisation augmentent linéairement avec la quantité de données en cours de traitement, par opposition à exponentiellement avec SnakeYaml. Je voudrais contraindre JYaml à me donner un résultat sans nom de classe, mais je suis assez perdu quant à la façon dont cela peut être réalisé.
(http://trac-hg.assembla.com/snakeyaml/report/1) Une fois que le problème de performance est signalé et identifié, il peut être corrigé. La sortie de SnakeYAML est très flexible. Vérifiez http://instantyaml.appspot.com/ (connectez-vous pour voir les options) – Andrey
Le problème est identifié: les expressions régulières ne sont pas mises à l'échelle dans SnakeYAML. JYaml n'utilise pas d'expressions régulières pour trouver le bon type. (scalar est toujours une chaîne dans JYaml). Il est possible de suivre la même approche dans SnakeYAML. Est-ce ce que vous attendez? – Andrey
@andrey: Merci d'avoir signalé cela. Je suis maintenant plus curieux: est-ce que l'utilisation d'expressions régulières, comme vous l'expliquez, est requise de telle sorte que/tout/dumper/chargeur bien écrit présente les mêmes problèmes de performance? –