首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JYaml:不包括类名的转储对象

JYaml:不包括类名的转储对象
EN

Stack Overflow用户
提问于 2009-02-10 11:23:34
回答 2查看 1.6K关注 0票数 1

我有一个被转储到YAML字符串的对象的ArrayList,并且一直在比较JYaml和SnakeYaml在处理这方面的性能。

代码语言:javascript
复制
    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输出:

代码语言:javascript
复制
- !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输出:

代码语言:javascript
复制
- {'1_1': One, '1_3': Three, '1_2': Two}
- {'2_1': One, '2_2': Two, '2_3': Three}

我更喜欢SnakeYaml的“干净”类名--更少的输出,因为这将更适合于语言中立的环境。

我更喜欢JYaml的速度。序列化/反序列化时间与正在处理的数据量成线性增加,而SnakeYaml则为指数级。

我想强迫JYaml给我一个类名--少输出,但是对于如何实现这一点,我感到非常困惑。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-02-19 16:24:39

检查SnakeYAML最新的源代码。现在这是可能的 (与JYaml一样)忽略隐式类型,并始终将标量解析为String。这比以前快了几倍。查看这里这里,了解如何使用新特性。

(随着RegularExpressions的关闭,序列化/反序列化时间与正在处理的数据量成线性增加。)

票数 -2
EN

Stack Overflow用户

发布于 2009-02-10 21:22:58

你怎么测量速度?什么叫“数据量”?它是YAML文档的大小还是文档的数量?

JYaml输出是不正确的。根据规范,忽略数字下划线和1_1 = 11 (至少对于YAML 1.1)。因为它实际上是一个字符串,而不是一个整数,所以表示应该是:

  • 1_1:1

或规范

  • "1_1":str "One“

否则,当文档被解析时,它将创建Map<Integer,String>而不是Map<字符串,String>。

JYaml存在许多未解决的问题,并且没有实现完整的YAML 1.1

JYaml可能确实更快,但这是由于简化了解析和发射。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/531920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档