我有一个ArrayList对象被转储到YAML字符串,并且一直在比较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的输出不包括:

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


SnakeYaml输出:

- {'1_1': One, '1_3': Three, '1_2': Two}
- {'2_1': One, '2_2': Two, '2_3': Three}



我更喜欢SnakeYaml的更“干净”的类名称更少的输出,因为这将更适合与语言无关的环境。

我更喜欢JYaml的速度。序列化/反序列化时间随要处理的数据量呈线性增加,而与SnakeYaml呈指数增长相反。

我想强迫JYaml给我提供无类的类输出,但是对于如何实现这一点我很迷惑。

最佳答案

查看SnakeYAML最新资源。 It is now possible(与JYaml中的相同)忽略隐式类型,并始终将标量解析为String。这快了几倍。
查看herehere以了解如何使用新功能。

(使用RegularExpressions时,关闭序列化/反序列化时间会随着处理的数据量线性增加。)

关于java - JYaml:转储对象,不包括类名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/531920/

10-11 22:32