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

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

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

    走自己的路

    路漫漫其修遠兮,吾將上下而求索

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      50 隨筆 :: 4 文章 :: 118 評論 :: 0 Trackbacks
     

    XStreamthoughtworks開發的開源產品,采用的是xpp來進行xml和對象之間的轉換。它不需要schema或其他的mapping文件就可以進行java對象和xml文件之間的轉換,API調用起來非常方便,并且擴展功能強大。                

    網址:http://xstream.codehaus.org


    JSON是目前比較流行的輕量級的對象數據轉換方式,常常用在ajaxweb service領域。目前大部分語言都有JSON的實現。Java領域有json lib,還有xstream json(jettison)

    網址:http://json-lib.sourceforge.net/

    http://jettison.codehaus.org


    主要是對
    3 (xstream, json lib, xstream json) 轉換的數據長度,還有轉換的效率做個比較。

    轉換的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;
    //    }
        
    }

     

    數據格式和長度比較:

    方法

    長度

    格式

    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"}}

     

    時間(轉換次數1000000):

    方式

    時間(ms)

    Json lib

    185638

    XStream xml

    247863

    XStream json

    395624

     

    Xstream xml方式比json lib慢:62s

    Xstream json方式比xstream xml慢:147s

     

    如何選擇:

    JSON:

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

     

    XStream

    采用xml作為數據轉換的方式,這就是xmljson之爭了。可以參考以下資源:

    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不需要關心xml schema驗證,它比json好的一個地方是它可以自動處理引用的表達方式,比如多個變量重復引用同一個對象,循環引用等,如;

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

    它的API使用太方便了,

    XStream xstream = new XStream();

    String xml = xstream.toXML(employee);

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

    Xstream自定義和擴展功能也很強大,如用戶可以通過converter來實現自己類型的轉換邏輯。

     

    現在我們有個項目需要設計一個通用的web service agent,根據客戶端提供的類名,方法名,參數等調用本地的方法。這樣可能需要一種統一的數據格式和處理方式,考慮傳的參數可能出現互相引用的情況,還有可讀性,將來的擴展性等問題決定默認方式還是使用xstream來轉換。



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

    評論

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

    # re: 對比XStream和JSON 2009-01-21 11:15 楊一
    數據傳輸還是用json
    但是xstream用來解析處理xml看起來不錯,比jaxb簡單  回復  更多評論
      

    # re: 對比XStream和JSON 2009-01-21 15:33 sniperking
    web service傳遞數據還是用XML比較好,通用性強  回復  更多評論
      

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

    # re: 對比XStream和JSON 2009-01-21 16:43 ldd600
    @yefeng
    json lib應該還好,它用了bean utils應該有緩存那些反射的結果。如果用json org的那個估計性能就不行了。  回復  更多評論
      

    主站蜘蛛池模板: 国产高清视频在线免费观看| 日本一区午夜艳熟免费| 日韩免费观看一级毛片看看| 免费精品视频在线| 亚洲一区中文字幕久久| 日韩一级免费视频| a级毛片在线免费观看| 亚洲av无码不卡久久| 亚洲性在线看高清h片| 久久免费看黄a级毛片 | 一区二区三区免费视频观看| 久久精品a亚洲国产v高清不卡| 免费无码又爽又高潮视频| 曰批全过程免费视频在线观看无码| 国产日本亚洲一区二区三区| 国产亚洲人成网站在线观看| 四虎永久在线观看免费网站网址| www.xxxx.com日本免费| 亚洲人成图片网站| 亚洲av午夜福利精品一区人妖| 欧洲美熟女乱又伦免费视频 | 最新亚洲成av人免费看| 亚洲成在人线aⅴ免费毛片| 羞羞视频免费网站在线看| 亚洲男人的天堂网站| 久久久久亚洲AV无码网站| 免费又黄又爽的视频| 最新欧洲大片免费在线| a视频免费在线观看| 视频一区二区三区免费观看| 亚洲综合丁香婷婷六月香| 亚洲A∨无码无在线观看| 亚洲国产午夜福利在线播放 | 国产v片免费播放| 99久久综合国产精品免费| 久久精品免费观看| 精品国产污污免费网站入口| 国产亚洲精品国产福利在线观看 | 免费A级毛片无码专区| 国产成人无码免费网站| 日韩国产精品亚洲а∨天堂免|