YAML 文字列にダンプされるArrayListオブジェクトがあり、これを処理する際の JYaml と SnakeYaml のパフォーマンスを比較しています。
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));
JYaml からの出力にはシリアル化されたオブジェクトのクラス名が含まれますが、SnakeYaml からの出力には含まれません。
JYml 出力:
- !java.util.HashMap
1_1: One
1_3: Three
1_2: Two
- !java.util.HashMap
2_1: One
2_2: Two
2_3: Three
SnakeYaml 出力:
- {'1_1': One, '1_3': Three, '1_2': Two}
- {'2_1': One, '2_2': Two, '2_3': Three}
これは言語に中立な環境により適しているため、SnakeYaml のより「クリーンな」クラス名のない出力を好みます。
JYamlの速度の方が好きです。シリアライゼーション/デシリアライゼーションの時間は、SnakeYaml では指数関数的に増加するのに対し、処理されるデータの量に 比例して増加します。
クラス名のない出力を JYaml に強制したいのですが、これをどのように実現できるかについてはかなり迷っています。