1

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 に強制したいのですが、これをどのように実現できるかについてはかなり迷っています。

4

2 に答える 2

-2

SnakeYAML の最新ソースを確認してください。(JYaml と同じように) 暗黙の型指定を無視して、常にスカラーを文字列として解析できるようになりました。これは数倍高速です。新しい機能の使用方法については、こちらこちらをご覧ください。

(RegularExpressions オフのシリアライゼーション/デシリアライゼーション時間は、処理されるデータの量に比例して増加します。)

于 2009-02-19T16:24:39.983 に答える