我必须将大量数据转换成XML格式。我正在研究JAXB,因为它是JDK 8的一部分,但我不确定它如何处理大量数据。Jackson XML是我遇到的另一个更新的库。在将对象序列化为XML方面,Jackson比JAXB快吗?
发布于 2021-01-20 08:18:49
我曾经编写过一个用例来测试jackson和jaxb在将对象序列化和反序列化到xml /从xml到xml时的性能。测试代码:
序列化:
/** 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);
}反序列化
/** 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<xml val='Json'>]]>]]></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次测试):
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时间消耗。
https://stackoverflow.com/questions/65805250
复制相似问题