走自己的路

          路漫漫其修遠(yuǎn)兮,吾將上下而求索

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            50 隨筆 :: 4 文章 :: 118 評論 :: 0 Trackbacks
            JAXB vs XStream

          這兩東東本質(zhì)上是有差別的,JAXB稱為OX binding工具,XStream應(yīng)該算序列化工具,但OX binding工具也會marshallunmarshall,所以包含了序列化這一部分。序列化工具不一定需要提供binding的功能。既然都玩序列化,那就簡單地比較一下它們兩在序列化方面的強(qiáng)弱吧。

          JAXBToplink JAXB 10133,應(yīng)該是JAXB 1.1標(biāo)準(zhǔn) (取消了schema的validation功能)

          XStream1.3.1

          數(shù)據(jù)長度:

          類型

          長度

          內(nèi)容

          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(已經(jīng)去掉了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

          結(jié)果對比:數(shù)據(jù)量XStream占優(yōu)勢,時間性能上Toplink Jaxb占明顯優(yōu)勢

          總結(jié)(只從序列化功能角度看)

          JAXB: 優(yōu)點(diǎn)

          • J2EE標(biāo)準(zhǔn)
          • 運(yùn)行時間比XStream

          缺點(diǎn)

          • 用起來不方便:需要把手動的把business object轉(zhuǎn)換成schema object,當(dāng)然也可以直接將schema object作為business object,或者采用反射的方法。
          • 有一定的局限性:需要schema或者annotation
          • 數(shù)據(jù)量稍大

          XStream優(yōu)點(diǎn):

          • 用起來方便
          • 不需要schema,拿過來就轉(zhuǎn)
          • 數(shù)據(jù)量稍小

          缺點(diǎn):

          • 非標(biāo)準(zhǔn)
          • 時間性能差

           




          評論

          # re: JAXB vs XStream 2009-03-05 12:04 jasin
          應(yīng)用場景不一樣,如果格式固定,就用jaxb,反之,xstream。  回復(fù)  更多評論
            

          # re: JAXB vs XStream 2009-03-06 06:46 ldd600
          是這么個理,如果對時間性能要求比較高的,jaxb的優(yōu)先級要高于xstream;如果schema不能確定,要選一種序列化工具,xstream就是這種工具。  回復(fù)  更多評論
            

          # re: JAXB vs XStream 2009-03-06 10:32 diggywang
          你這個xstream用法可以再優(yōu)化!
          更小的數(shù)據(jù)量、更少的時間:
          <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>  回復(fù)  更多評論
            

          # re: JAXB vs XStream 2009-03-06 13:57 叱咤紅人
          @diggywang
          可以用alias省掉一些信息,我們是用在遠(yuǎn)程通信上的,如果去掉了類的路徑,就無法還原了。采用alias我想會帶來復(fù)雜性的。這樣是我們所需的最少信息量了。請問有什么好的辦法可以不要某些white space,相當(dāng)于jaxb的 this.marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
          Boolean.FALSE);

            回復(fù)  更多評論
            

          # re: JAXB vs XStream 2009-03-07 10:42 stone2083
          @叱咤紅人
          我不太明白,在遠(yuǎn)程通信上,使用xml作為中間傳輸內(nèi)容,就是為了做系統(tǒng)(甚至是異構(gòu)系統(tǒng))之間的解耦。
          如果xml內(nèi)容上,還捆綁了類信息,那么既要求兩個系統(tǒng)為同語言系統(tǒng),又將兩個系統(tǒng)都捆綁到具體的一個model上。未必是一件好事。
            回復(fù)  更多評論
            

          # re: JAXB vs XStream 2009-03-07 20:07 ldd600
          @stone2083
          呵呵,類似RPC吧:JAX-RPC, REST-RPC。序列化后還是要還原成Object的。  回復(fù)  更多評論
            

          # re: JAXB vs XStream 2009-03-16 19:25 stone2083
          我還有一個問題不明白:
          如果需要捆綁Object,類似RPC調(diào)用,那為什么不選擇hessian等二進(jìn)制序列化方式的組件。
          畢竟二進(jìn)制序列化/反序列化效率比xml轉(zhuǎn)化高多了。

          當(dāng)然hessian不同版本在協(xié)議上的不兼容,是一件很頭疼的事情 :(  回復(fù)  更多評論
            

          # re: JAXB vs XStream 2009-03-17 21:14 叱咤紅人
          @stone2083
          是個很好的提議。但在可讀性和公司policy方面還需要考慮。而且我們只是需要序列化的機(jī)制,并不是需要特殊的服務(wù)協(xié)議。我們可以通過HTTP,RMI, JMS,F(xiàn)TP或者其他各種方式完成同步,異步的服務(wù)調(diào)用。  回復(fù)  更多評論
            

          # re: JAXB vs XStream[未登錄] 2009-09-15 12:03 Jeffrey
          @stone2083
          首先,xstream是為了序列化成xml文檔,并沒要求服務(wù)端也需要xstream來解析文檔啊,所以不存在異構(gòu)系統(tǒng)讀取該類的情況,異構(gòu)系統(tǒng)完全可以把xml文檔看做是一份數(shù)據(jù)來用。而且xstream是可以更改內(nèi)容標(biāo)簽的名稱的。
          然后是2進(jìn)制序列化的問題,其實(shí)不是說2進(jìn)制序列化不好,而是因?yàn)楹芏鄳?yīng)用環(huán)境只開發(fā)http協(xié)議,所以才有xml文檔做webservice的接口。  回復(fù)  更多評論
            

          主站蜘蛛池模板: 孙吴县| 互助| 汝城县| 梓潼县| 同江市| 奉新县| 固阳县| 临湘市| 濮阳县| 隆安县| 栾川县| 本溪市| 麦盖提县| 西林县| 长海县| 和田市| 永顺县| 长治市| 玛曲县| 奈曼旗| 宁远县| 加查县| 东台市| 临漳县| 孝昌县| 台前县| 仪陇县| 那坡县| 锦屏县| 大渡口区| 满城县| 务川| 页游| 邢台县| 南宫市| 普格县| 凯里市| 昌邑市| 马鞍山市| 慈溪市| 河东区|