首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与JAXB相比,Jackson在创建XML方面的性能如何?

与JAXB相比,Jackson在创建XML方面的性能如何?
EN

Stack Overflow用户
提问于 2021-01-20 07:56:28
回答 1查看 1.5K关注 0票数 2

我必须将大量数据转换成XML格式。我正在研究JAXB,因为它是JDK 8的一部分,但我不确定它如何处理大量数据。Jackson XML是我遇到的另一个更新的库。在将对象序列化为XML方面,Jackson比JAXB快吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-20 08:18:49

我曾经编写过一个用例来测试jackson和jaxb在将对象序列化和反序列化到xml /从xml到xml时的性能。测试代码:

序列化:

代码语言:javascript
复制
/** counter */
private int counter = 10000;

@Test
public void doTest() throws JAXBException{
    TextMsg msg = new TextMsg();
    msg.setToUserName("jackson");
    msg.setFromUserName("hawaii");
    msg.setContent("jack<xml val='Json'>]]>");
    long start = System.currentTimeMillis();
    for(int i=0; i< counter; i++){
        ByteArrayOutputStream xmlOut = null;
        ByteArrayInputStream xmlIn = null;
        try{
            xmlOut = new ByteArrayOutputStream();
            XMLFactory.toXML(msg, xmlOut);
            String xml = new String(xmlOut.toByteArray());
        }finally{
            IOUtils.closeQuietly(xmlIn);
            IOUtils.closeQuietly(xmlOut);
        }
    }
    long end = System.currentTimeMillis();
    logger.info("consume:{}", end - start);
}

反序列化

代码语言:javascript
复制
/** counter */
private int counter = 10000;
    
@Test
public void doTest() throws IOException, JAXBException{
    String xml = "<?xml version='1.0' encoding='UTF-8'?><xml><ToUserName><![CDATA[jackson]]></ToUserName><FromUserName><![CDATA[hawaii]]></FromUserName><Content><![CDATA[jack&lt;xml val=&apos;Json&apos;&gt;]]&gt;]]></Content></xml>";
    long start = System.currentTimeMillis();
    for(int i=0; i< counter; i++){
        ByteArrayOutputStream xmlOut = null;
        ByteArrayInputStream xmlIn = null;
        try{
            xmlOut = new ByteArrayOutputStream();
            TextMsg textMsg = XMLFactory.fromXML(xml, TextMsg.class);
        }finally{
            IOUtils.closeQuietly(xmlIn);
            IOUtils.closeQuietly(xmlOut);
        }
    }
    long end = System.currentTimeMillis();
    logger.info("consume:{}", end - start);
}

结果(单位:毫秒,平均3次测试):

代码语言:javascript
复制
type: entity -> xml
JAXB:24716
Jackson:1123
JAXB:Jackson  22:1

type: xml -> entity
JAXB: 31622
Jackson: 1049
JAXB:Jackson  30:1

结论:同样的任务,在序列化中,Jackson使用JAXB的1/22时间消耗.在反序列化中,Jackson使用JAXB的1/30时间消耗。

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

https://stackoverflow.com/questions/65805250

复制
相关文章

相似问题

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