JAXB vs XStream

JAXB vs XStream

这两东东本质上是有差别的,JAXB称为OX binding工具,XStream应该算序列化工具,但OX binding工具也会marshallunmarshall,所以包含了序列化这一部分。序列化工具不一定需要提供binding的功能。既然都玩序列化,那就简单地比较一下它们两在序列化方面的强弱吧。

JAXBToplink JAXB 10133,应该是JAXB 1.1标准 (取消了schema的validation功能)

XStream1.3.1

数据长度:

类型

长度

内容

XStraem

351

<com.oocl.frm.ws.sample.Employee>

 <name>Liufei</name>

 <age>40</age>

 <address>

    <street>Zhaojiabang</street>

    <country>China</country>

    <city>Shanghai</city>

    <doorNum>789</doorNum>

    <empName>Afka liu</empName>

 </address>

 <salary>20000.0</salary>

 <isActive>false</isActive>

 <sexy>F</sexy>

</com.oocl.frm.ws.sample.Employee>

Toplink JAXB

589(已经去掉了white space)

<?xml version="1.0" encoding="UTF-8"?>

<ns0:employee xsi:schemaLocation="http://www.oocl.com/frm/ws/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ns0="http://www.oocl.com/frm/ws/jaxb" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><ns0:name>Liufei</ns0:name><ns0:age>40</ns0:age><ns0:salary>20000.0</ns0:salary><ns0:sexy>F</ns0:sexy><ns0:isActive>false</ns0:isActive><ns0:address><ns0:street>Zhaojiabang</ns0:street><ns0:country>China</ns0:country><ns0:city>Shanghai</ns0:city><ns0:doorNum>789</ns0:doorNum><ns0:empName>Afka liu</ns0:empName></ns0:address></ns0:employee>

时间:序列化和反序列化1000000次。

类型

序列化(ms

反序列化(ms

XStraem

90148

135878

Toplink JAXB

34872

56557

结果对比:数据量XStream占优势,时间性能上Toplink Jaxb占明显优势

总结(只从序列化功能角度看)

JAXB: 优点

  • J2EE标准
  • 运行时间比XStream

缺点

  • 用起来不方便:需要把手动的把business object转换成schema object,当然也可以直接将schema object作为business object,或者采用反射的方法。
  • 有一定的局限性:需要schema或者annotation
  • 数据量稍大

XStream优点:

  • 用起来方便
  • 不需要schema,拿过来就转
  • 数据量稍小

缺点:

  • 非标准
  • 时间性能差

 



posted on 2009-03-04 17:15  叱咤红人 阅读(4513)  评论(9)   编辑   收藏 所属分类:  JDBC JNDI JMS RMI EJB and Other J2EE Tech Other Java and J2EE frameworks XML

评论

#  re: JAXB vs XStream  2009-03-05 12:04  jasin
应用场景不一样,如果格式固定,就用jaxb,反之,xstream。   回复   更多评论 
  

#  re: JAXB vs XStream  2009-03-06 06:46  ldd600
是这么个理,如果对时间性能要求比较高的,jaxb的优先级要高于xstream;如果schema不能确定,要选一种序列化工具,xstream就是这种工具。   回复   更多评论 
  

#  re: JAXB vs XStream  2009-03-06 10:32  diggywang
你这个xstream用法可以再优化!
更小的数据量、更少的时间:
<com.oocl.frm.ws.sample.Employee name="LiuFei" age="40" salary="20000.0" isActive="false" sex="F" >

<address street="Zhaojiabang" country="china" city="Shanghai" doornum=789 empName="Afka liu" />

</com.oocl.frm.ws.sample.Employee>   回复   更多评论 
  

#  re: JAXB vs XStream  2009-03-06 13:57  叱咤红人
@diggywang 
可以用alias省掉一些信息,我们是用在远程通信上的,如果去掉了类的路径,就无法还原了。采用alias我想会带来复杂性的。这样是我们所需的最少信息量了。请问有什么好的办法可以不要某些white space,相当于jaxb的 this.marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, 
Boolean.FALSE); 

   回复   更多评论 
  

#  re: JAXB vs XStream  2009-03-07 10:42  stone2083
@叱咤红人
我不太明白,在远程通信上,使用xml作为中间传输内容,就是为了做系统(甚至是异构系统)之间的解耦。
如果xml内容上,还捆绑了类信息,那么既要求两个系统为同语言系统,又将两个系统都捆绑到具体的一个model上。未必是一件好事。
   回复   更多评论 
  

#  re: JAXB vs XStream  2009-03-07 20:07  ldd600
@stone2083 
呵呵,类似RPC吧:JAX-RPC, REST-RPC。序列化后还是要还原成Object的。   回复   更多评论 
  

#  re: JAXB vs XStream  2009-03-16 19:25  stone2083
我还有一个问题不明白:
如果需要捆绑Object,类似RPC调用,那为什么不选择hessian等二进制序列化方式的组件。
毕竟二进制序列化/反序列化效率比xml转化高多了。

当然hessian不同版本在协议上的不兼容,是一件很头疼的事情 :(   回复   更多评论 
  

#  re: JAXB vs XStream  2009-03-17 21:14  叱咤红人
@stone2083 
是个很好的提议。但在可读性和公司policy方面还需要考虑。而且我们只是需要序列化的机制,并不是需要特殊的服务协议。我们可以通过HTTP,RMI, JMS,FTP或者其他各种方式完成同步,异步的服务调用。   回复   更多评论 
  

#  re: JAXB vs XStream[未登录]   2009-09-15 12:03  Jeffrey
@stone2083 
首先,xstream是为了序列化成xml文档,并没要求服务端也需要xstream来解析文档啊,所以不存在异构系统读取该类的情况,异构系统完全可以把xml文档看做是一份数据来用。而且xstream是可以更改内容标签的名称的。 
然后是2进制序列化的问题,其实不是说2进制序列化不好,而是因为很多应用环境只开发http协议,所以才有xml文档做webservice的接口。   回复   更多评论 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值