欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
開(kāi)源項目Xstream簡(jiǎn)介
開(kāi)源項目Xstream簡(jiǎn)介 ---用于序列化對象與XML對象之間的相互轉換

開(kāi)源項目Xstream簡(jiǎn)介

目錄
  • 項目簡(jiǎn)介     4
  • 典型的應用場(chǎng)合     5
  • 系統架構分析     5
  • 實(shí)例講解     6
  • 創(chuàng )建需要序列化的對象類(lèi)     6
  • 初始化XStream類(lèi)     9
  • 注冊需要轉換的類(lèi)的別名     10
  • 將對象序列化為XML文檔     10
  • 從XML文件反序列化成對象     11
  • 結束語(yǔ)     11
  • 參考資料     11

項目簡(jiǎn)介

開(kāi)源項目XStream是一套簡(jiǎn)單實(shí)用的類(lèi)庫,用于序列化對象與XML對象之間的相互轉換。本文以XStream 1.1.2版進(jìn)行說(shuō)明,它具有以下幾個(gè)特點(diǎn):
  1. 靈活易用:在更高的層次上提供了簡(jiǎn)單、靈活、易用的統一接口,用戶(hù)無(wú)需了解項目的底層細節
  2. 無(wú)需映射:大多數對象都可以在無(wú)需映射的情況下進(jìn)行序列化與反序列化的操作
  3. 高速穩定:設計時(shí)力求達到的最重要的指標是解析速度快、占用內存少,以使之能夠適用于大的對象處理或是對信息吞吐量要求高的系統
  4. 清晰易懂:項目采用reflection機制得到無(wú)冗余信息的XML文件。所生成的XML文件較本地Java序列化產(chǎn)物更簡(jiǎn)潔,格式更清晰,更便于用戶(hù)閱讀
  5. 無(wú)需修改:完全序列化包括private和final類(lèi)型在內的全部?jì)炔孔侄?。支持非公有?lèi)和內部類(lèi),類(lèi)可以沒(méi)有缺省的構造函數
  6. 易于集成:通過(guò)實(shí)現特定的接口,XStream可以直接與其它任何樹(shù)型結構進(jìn)行序列化與反序列化操作(而不僅僅是XML格式)
  7. 靈活轉換:轉換策略是可以定制的,允許用戶(hù)自定義特殊類(lèi)型的對象如何以XML格式存儲。
  8. 錯誤處理:由于XML資料不合法而造成異常時(shí),會(huì )提供詳細地診斷信息幫助處理問(wèn)題。

典型的應用場(chǎng)合

XStream主要應用于以下場(chǎng)合:
  • 數據對象的持久化
  • 數據交換
  • 配置文件

XStream系統架構分析

XStream的架構主要由四部分組成:

    Converters(轉換器)
   
    當XStream遇到需要輪換的對象時(shí),它會(huì )委派給合適的轉換器實(shí)現,XStream為通用類(lèi)型提供了多種轉換器實(shí)現,包括基本數據類(lèi)型、String、Collections、Arrays、null、Date,等等。
   
    XStream提供了缺省的轉換器,當需要轉換的數據對象沒(méi)有匹配的轉換器時(shí)會(huì )使用。是通過(guò)反射機制自動(dòng)完成對對象內所有字段的映射。

    IO(輸入/輸出)
   
    XStream是通過(guò)接口HierarchicalStramWriter和HierarchialStreamReader從底層X(jué)ML數據中抽象而來(lái)的,上面的接口分別用于序列化和反序列化操作。
   
    該特性使得XStream可以直接使用XML解析類(lèi)從數據流中讀取數據,或者是直接從已經(jīng)存在的結構中提取數據(比如DOM)。如果XStream所操作的XML數據已經(jīng)部分被其它XML解析類(lèi)處理過(guò)了(比如SOAP類(lèi)的實(shí)例),這樣就可以避免在我們這一層的再次解析操作。

    Context(上下文引用)

    在XStream序列化或反序列化對象時(shí),它會(huì )創(chuàng )建兩個(gè)類(lèi)MarshallingContext和UnmarshallingContext,由它們來(lái)處理數據,以及委派合適的轉換器。
   
    XStream提供了三對上下文的缺省實(shí)現,它們之間有著(zhù)細微的差別。缺省值可以通過(guò)方法XStream.setMode()來(lái)改變,需要傳遞下面參數中的一個(gè):
   
    XStream.XPATH_REFERENCES
    (缺省的)通過(guò)XPath引用來(lái)標識重復的引用。這樣產(chǎn)生的XML具有最小的混亂性。
   
    XStream.ID_REFERENCES
    使用ID引用來(lái)標識重復的引用。在一些場(chǎng)合,比如使用手寫(xiě)XML時(shí),這樣將會(huì )更易于操作
   
    XStream.NO_REFERENCES
    這種情況將失去對圖形對象的支持,僅把對象看作為樹(shù)型結構。重復的引用被視作兩個(gè)不同的對象,循環(huán)引用會(huì )導致異常產(chǎn)生。相對于上面兩種模式,這種模式速度會(huì )更快,占用內存會(huì )更
   
    Facade(統一入口)
    主要類(lèi)XStream用作所有項目的入口點(diǎn)。它將上面所提及的重要組件集成在一起,提供更簡(jiǎn)單易用的API操作。

實(shí)例講解

下面我們通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)了解XStream是如何工作的。
創(chuàng )建需要序列化的對象類(lèi)
/**個(gè)人信息類(lèi)*/
public class Person
{
/**
* 構造函數
  * @param fn 名稱(chēng)前部分
  * @param ln名稱(chēng)后部分
  * @param faxn 傳真號碼
  * @param mobilen 移動(dòng)電話(huà)
  */
  public Person(String fn, String ln, PhoneNumber faxn, PhoneNumber mobilen)
  {
    this.firstName = fn;
    this.lastName = ln;
    this.faxNumber = faxn;
    this.mobileNumber = mobilen;
  }

/**
* 構造函數
  * @param fn 名稱(chēng)前部分
  * @param ln名稱(chēng)后部分
  */
  public Person(String fn, String ln)
  {
    this.firstName = fn;
    this.lastName = ln;
  }

  private String firstName;

  private String lastName;

  private PhoneNumber faxNumber;

  private PhoneNumber mobileNumber;

  /**
  * @return Returns the faxNumber.
  */
  public PhoneNumber getFaxNumber()
  {
    return faxNumber;
  }

  /**
  * @param faxNumber
  * The faxNumber to set.
  */
  public void setFaxNumber(PhoneNumber faxNumber)
  {
    this.faxNumber = faxNumber;
  }

  /**
  * @return Returns the firstName.
  */
  public String getFirstName()
  {
    return firstName;
  }

  /**
  * @param firstName
  * The firstName to set.
  */
  public void setFirstName(String firstName)
  {
    this.firstName = firstName;
  }

  /**
  * @return Returns the lastName.
  */
  public String getLastName()
  {
    return lastName;
  }

  /**
  * @param lastName
  * The lastName to set.
  */
  public void setLastName(String lastName)
  {
    this.lastName = lastName;
  }

  /**
  * @return Returns the mobileNumber.
  */
  public PhoneNumber getMobileNumber()
  {
    return mobileNumber;
  }

  /**
  * @param mobileNumber
  * The mobileNumber to set.
  */
  public void setMobileNumber(PhoneNumber mobileNumber)
  {
    this.mobileNumber = mobileNumber;
  }
}

/**電話(huà)號碼信息類(lèi)*/
public class PhoneNumber
{
  private int phoneId;

  private String phoneNumber;

/**
* 構造函數
  * @param phoneId ID號碼
  * @param phoneNumber 電話(huà)號碼
  */
  public PhoneNumber(int phoneId, String phoneNumber)
  {
    super();
    this.phoneId = phoneId;
    this.phoneNumber = phoneNumber;
  }

  /**
  * @return Returns the phoneNumber.
  */
  public String getPhoneNumber()
  {
    return phoneNumber;
  }

  /**
  * @param phoneNumber
  * The phoneNumber to set.
  */
  public void setPhoneNumber(String phoneNumber)
  {
    this.phoneNumber = phoneNumber;
}

  /**
  * @return Returns the phoneId.
  */
  public int getPhoneId()
  {
    return phoneId;
  }

  /**
  * @param phoneId
  * The phoneId to set.
  */
  public void setPhoneId(int phoneId)
  {
    this.phoneId = phoneId;
  }
}

這里定義的屬性都為private,XStream沒(méi)有強制規定屬性的可見(jiàn)性,默認情況下所有屬性都會(huì )進(jìn)行轉換;雖然XStream不強制要求你必須要有setter和getter方法,也不要求你要有一個(gè)默認的類(lèi)構造方法,但是在實(shí)際應用時(shí),這些還是必須的,因為你在程序中需要為對象設置屬性,需要構造對象,如果沒(méi)有這些方法程序是不能編譯通過(guò)的。

初始化XStream類(lèi)

使用以下的語(yǔ)句進(jìn)行初始化操作:

XStream xstream = new XStream();

默認情況下,XStream會(huì )采用Xpp3庫,XPP3是一種運行效率非常高的XML全解析實(shí)現。如果你不想依靠Xpp3庫的話(huà),也可以使用一個(gè)標準的JAXP DOM解析器,可以采用以下語(yǔ)句進(jìn)行初始化:

//不使用XPP3庫
XStream xstream = new XStream(new DomDriver());

此xstream實(shí)例,為線(xiàn)程安全的,可以供多個(gè)線(xiàn)程進(jìn)行調用,共享使用。參考com.thoughtworks.xstream.io.xml包,會(huì )發(fā)現系統提供了多種標識解析器供我們選擇,包括,DomDriver、JDomDriver、StaxDriver等等。

注冊需要轉換的類(lèi)的別名

現在,為了使XStream輸出的XML文件更簡(jiǎn)練,我們要為需要轉換的用戶(hù)類(lèi)設置別名,這些明會(huì )在轉換過(guò)程中用于結點(diǎn)設置,注冊別名使用以下的語(yǔ)句:

xstream.alias(“person”, Person.class);
xstream.alias(“phonenumber”, PhoneNumber.class);

當然,這一步不是必須的,如果不進(jìn)行注冊的話(huà),XStream默認會(huì )在轉換時(shí),將用戶(hù)類(lèi)的全限定名稱(chēng)加入到XML文件中,如com.test.Person,如果在數據量較大的時(shí)候,生成的XML文件會(huì )增大不少。

將對象序列化為XML文檔

    到了這一步,我們就可以將一個(gè)Java對象序列化為XML文檔了,先聲明一個(gè)Person對象,然后為該對象設置一個(gè)手機號碼,一個(gè)傳真號碼,使用下面的語(yǔ)句:

//生成Person對象,并注冊屬性
Person joe = new Person("Bill", "Gates");
joe.setFaxNumber(new PhoneNumber(101, "83501194"));
joe.setMobileNumber(new PhoneNumber(102, "13686447788"));

    下面就是將生成的對象序列化,我們需要做的只是簡(jiǎn)單的使用下面的一個(gè)語(yǔ)句就可以:

String xmls = xstream.toXML(joe);

    從結果我們可以看出,生成的XML文件非常簡(jiǎn)潔,除了必要的結點(diǎn)外,沒(méi)有一絲多余的信息存在。參考下面的生成結果:

<person>
<firstName>Bill</firstName>
<lastName>Gates</lastName>
<faxNumber>
  <phoneId>101</phoneId>
  <phoneNumber>83501194</phoneNumber>
</faxNumber>
<mobileNumber>
  <phoneId>102</phoneId>
  <phoneNumber>13686447788</phoneNumber>
</mobileNumber>
</person>

從XML文件反序列化成對象

    從一個(gè)XML文件反序列化出一個(gè)對象同樣簡(jiǎn)單,一起來(lái)看下面的代碼:

Person newJoe = (Person)xstream.fromXML(xmls);

結束語(yǔ)

   通過(guò)上面的實(shí)例,我們可以看出,使用XStream來(lái)處理對象的序列化和反序列化很簡(jiǎn)單,只需要幾行代碼即可,而且該項目對標識的XML解析器有很好的支持,最重要的是生成的XML很“干凈”,沒(méi)有過(guò)多的冗余信息,該項目還在持續進(jìn)行中,讓我們一起來(lái)關(guān)注它吧!
參考資料

XStream官方資料     http://xstream.codehaus.org/index.html
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
xstream兩分鐘教程
XStream實(shí)用指南
java 利用Xstream注解生成和解析xml
利用XMLBean輕輕松松讀寫(xiě)XML
怎樣對帶有不可序列化屬性的Java對象進(jìn)行序列化
使用 XStream 把 Java 對象序列化為 XML
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久