<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    走自己的路

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

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

    XStreamthoughtworks開發(fā)的開源產(chǎn)品,采用的是xpp來進(jìn)行xml和對(duì)象之間的轉(zhuǎn)換。它不需要schema或其他的mapping文件就可以進(jìn)行java對(duì)象和xml文件之間的轉(zhuǎn)換,API調(diào)用起來非常方便,并且擴(kuò)展功能強(qiáng)大。                

    網(wǎng)址:http://xstream.codehaus.org


    JSON是目前比較流行的輕量級(jí)的對(duì)象數(shù)據(jù)轉(zhuǎn)換方式,常常用在ajaxweb service領(lǐng)域。目前大部分語言都有JSON的實(shí)現(xiàn)。Java領(lǐng)域有json lib,還有xstream json(jettison)

    網(wǎng)址:http://json-lib.sourceforge.net/

    http://jettison.codehaus.org


    主要是對(duì)
    3 (xstream, json lib, xstream json) 轉(zhuǎn)換的數(shù)據(jù)長(zhǎng)度,還有轉(zhuǎn)換的效率做個(gè)比較。

    轉(zhuǎn)換的java類為:

    package com.ldd600.ws;

    public class Employee {
        
    private String name;
        
    private int age;
        
    private Address address;
        
    private double salary;
        
    private boolean isActive;
        
    private char sexy;

        
    public String getName() {
            
    return name;
        }


        
    public void setName(String naem) {
            
    this.name = naem;
        }


        
    public int getAge() {
            
    return age;
        }


        
    public void setAge(int age) {
            
    this.age = age;
        }


        
    public Address getAddress() {
            
    return address;
        }


        
    public void setAddress(Address address) {
            
    this.address = address;
        }


        
    public double getSalary() {
            
    return salary;
        }


        
    public void setSalary(double salary) {
            
    this.salary = salary;
        }


        
    public boolean isActive() {
            
    return isActive;
        }


        
    public void setActive(boolean isActive) {
            
    this.isActive = isActive;
        }


        
    public char getSexy() {
            
    return sexy;
        }


        
    public void setSexy(char sexy) {
            
    this.sexy = sexy;
        }


    }


    package com.ldd600.ws;

    public class Address {
        
    private String street;
        
    private String country;
        
    private String city;
        
    private String doorNum;
    //    private Employee employee;
        private String empName;
        
        
    public String getStreet() {
            
    return street;
        }


        
    public void setStreet(String street) {
            
    this.street = street;
        }


        
    public String getCountry() {
            
    return country;
        }


        
    public void setCountry(String country) {
            
    this.country = country;
        }


        
    public String getCity() {
            
    return city;
        }


        
    public void setCity(String city) {
            
    this.city = city;
        }


        
    public String getDoorNum() {
            
    return doorNum;
        }


        
    public void setDoorNum(String doorNum) {
            
    this.doorNum = doorNum;
        }


        
    public String getEmpName() {
            
    return empName;
        }


        
    public void setEmpName(String empName) {
            
    this.empName = empName;
        }

        
    //    public Employee getEmployee() {
    //        return employee;
    //    }
    //
    //    public void setEmployee(Employee employee) {
    //        this.employee = employee;
    //    }
        
    }

     

    數(shù)據(jù)格式和長(zhǎng)度比較:

    方法

    長(zhǎng)度

    格式

    Xstream

    328

    <com.ldd600.ws.Employee>

      <name>gavin</name>

      <age>0</age>

      <address>

        <street>zhaojiabang</street>

        <country>china</country>

        <city>shanghai</city>

        <doorNum>789</doorNum>

        <empName>gavin</empName>

      </address>

      <salary>300000.0</salary>

      <isActive>true</isActive>

      <sexy>m</sexy>

    </com.ldd600.ws.Employee>

    Json lib

    170

    "789","empName":"gavin","street":"zhaojiabang"},"age":0,"name":"gavin","salary":300000,"sexy":"m"}

    XStream json

    183

    {"employee":{"name":"gavin","age":0,"address":{"street":"zhaojiabang","country":"china","city":"shanghai","doorNum":789,"empName":"gavin"},"salary":300000,"isActive":true,"sexy":"m"}}

     

    時(shí)間(轉(zhuǎn)換次數(shù)1000000):

    方式

    時(shí)間(ms)

    Json lib

    185638

    XStream xml

    247863

    XStream json

    395624

     

    Xstream xml方式比json lib慢:62s

    Xstream json方式比xstream xml慢:147s

     

    如何選擇:

    JSON:

    只是純粹數(shù)據(jù)轉(zhuǎn)換的方式,如果不需要命名空間,驗(yàn)證,XSLTxml的功能,可以考慮使用。但是JSON規(guī)范還存在一些不支持的情況,比如當(dāng)Address類中也有Employee類的引用時(shí),轉(zhuǎn)換就會(huì)拋出異常。要說明的是jettison應(yīng)該是xmljson之間轉(zhuǎn)換的工具,xstream利用jettison完成java對(duì)象到xml再到json的轉(zhuǎn)換,這樣性能就更糟糕了。而且xstream json有很多不滿足json規(guī)范的地方,比如一個(gè)空stringjson規(guī)范中會(huì)轉(zhuǎn)成null,而在xstream json中會(huì)轉(zhuǎn)換成””, 所以在使用其他json工具消費(fèi)xstream json生產(chǎn)的json字符串時(shí)就會(huì)出現(xiàn)問題。但Json lib提供了JSonConfig類解決了這個(gè)問題。如果進(jìn)行xmljson之間的轉(zhuǎn)換可以考慮使用jettison

     

    XStream

    采用xml作為數(shù)據(jù)轉(zhuǎn)換的方式,這就是xmljson之爭(zhēng)了。可以參考以下資源:

    JSON vs. XML: The Debate

    http://ajaxian.com/archives/json-vs-xml-the-debate

    JSON Web Services - the XML JSON debate further ahead

    http://techtracer.com/2007/04/01/json-web-services-the-xml-json-debate-further-ahead/

    JSON Pros and Cons

    http://myarch.com/json-pros-and-cons

    Debate: JSON vs. XML as a data interchange format

    http://www.infoq.com/news/2006/12/json-vs-xml-debate



    Xstream不需要關(guān)心xml schema驗(yàn)證,它比json好的一個(gè)地方是它可以自動(dòng)處理引用的表達(dá)方式,比如多個(gè)變量重復(fù)引用同一個(gè)對(duì)象,循環(huán)引用等,如;

    <employee reference="../.."/>

    它的API使用太方便了,

    XStream xstream = new XStream();

    String xml = xstream.toXML(employee);

    Employee xsEmployee = (Employee) xstream.fromXML(xml);

    Xstream自定義和擴(kuò)展功能也很強(qiáng)大,如用戶可以通過converter來實(shí)現(xiàn)自己類型的轉(zhuǎn)換邏輯。

     

    現(xiàn)在我們有個(gè)項(xiàng)目需要設(shè)計(jì)一個(gè)通用的web service agent,根據(jù)客戶端提供的類名,方法名,參數(shù)等調(diào)用本地的方法。這樣可能需要一種統(tǒng)一的數(shù)據(jù)格式和處理方式,考慮傳的參數(shù)可能出現(xiàn)互相引用的情況,還有可讀性,將來的擴(kuò)展性等問題決定默認(rèn)方式還是使用xstream來轉(zhuǎn)換。



    posted on 2009-01-20 17:43 叱咤紅人 閱讀(3927) 評(píng)論(5)  編輯  收藏 所屬分類: JDBC JNDI JMS RMI EJB and Other J2EE Tech TestXML

    評(píng)論

    # re: 對(duì)比XStream和JSON 2009-01-21 10:24 sorcerer
    乖乖,這么多人看,沒人評(píng)論.我來支持一下.
    thoughtworks如雷貫耳啊...
      回復(fù)  更多評(píng)論
      

    # re: 對(duì)比XStream和JSON 2009-01-21 11:15 楊一
    數(shù)據(jù)傳輸還是用json
    但是xstream用來解析處理xml看起來不錯(cuò),比jaxb簡(jiǎn)單  回復(fù)  更多評(píng)論
      

    # re: 對(duì)比XStream和JSON 2009-01-21 15:33 sniperking
    web service傳遞數(shù)據(jù)還是用XML比較好,通用性強(qiáng)  回復(fù)  更多評(píng)論
      

    # re: 對(duì)比XStream和JSON 2009-01-21 16:06 yefeng
    json_lib性能也不是很好的,還是自己寫一個(gè)吧,也不難的,就反射而已  回復(fù)  更多評(píng)論
      

    # re: 對(duì)比XStream和JSON 2009-01-21 16:43 ldd600
    @yefeng
    json lib應(yīng)該還好,它用了bean utils應(yīng)該有緩存那些反射的結(jié)果。如果用json org的那個(gè)估計(jì)性能就不行了。  回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 日韩免费视频一区| 女人18毛片水最多免费观看| 99热在线免费播放| 免费观看激色视频网站(性色) | 日韩亚洲人成在线| 亚洲JIZZJIZZ妇女| h视频免费高清在线观看| 免费无码又爽又刺激高潮软件| 久久国产精品萌白酱免费| 久热中文字幕在线精品免费| 国产成人A在线观看视频免费| 免费国产成人午夜私人影视| 亚洲宅男天堂在线观看无病毒| 久久久无码精品亚洲日韩蜜臀浪潮| 色噜噜亚洲男人的天堂| 麻豆91免费视频| 久久久久久影院久久久久免费精品国产小说| 日韩在线播放全免费| 亚洲AV无码之日韩精品| 亚洲91av视频| WWW亚洲色大成网络.COM| 中国一级全黄的免费观看| 国产卡二卡三卡四卡免费网址| 亚洲国产一区二区三区| 久久综合亚洲色HEZYO社区| 亚洲AV成人精品日韩一区| 18禁在线无遮挡免费观看网站| 成人免费午夜视频| 久久被窝电影亚洲爽爽爽| 亚洲中文无码永久免费| 丝瓜app免费下载网址进入ios| 免费精品国产日韩热久久| 国产成人亚洲精品影院| 亚洲国产午夜精品理论片| 国产免费播放一区二区| 野花高清在线观看免费3中文| 亚洲人精品午夜射精日韩| jiz zz在亚洲| 国产成人久久AV免费| 免费a在线观看播放| 亚洲欧洲另类春色校园小说|