最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解XML,Object,Json轉(zhuǎn)換與Xstream的使用

 更新時(shí)間:2017年02月11日 11:43:20   作者:CrazyCodeBoy  
這篇文章主要介紹了詳解XML,Object,Json轉(zhuǎn)換與Xstream的使用的相關(guān)資料,需要的朋友可以參考下

詳解XML,Object,Json轉(zhuǎn)換與Xstream的使用

1.Xstream的特點(diǎn):

這里直接引用Xstream官方的敘述:

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

 2.初始化XStream類(lèi)

說(shuō)Xstream簡(jiǎn)單是因?yàn)樗峁┙y(tǒng)一入口,主要類(lèi)XStream用作所有項(xiàng)目的入口點(diǎn)。它將重要組件集成在一起,提供更簡(jiǎn)單易用的API操作。

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

XStreamxstream = new XStream();

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

//不使用XPP3庫(kù)
XStreamxstream = new XStream(new DomDriver());

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

前面提到了Xstream提供了對(duì)Json的支持,是因?yàn)閄stream內(nèi)置了兩個(gè)Driver:

1.JsonHierarchicalStreamDriver:不依賴(lài)其他類(lèi)庫(kù),只實(shí)現(xiàn) obj->JSON
2.JettisonMappedXmlDriver:依賴(lài)jettison類(lèi)庫(kù),實(shí)現(xiàn) JSON->obj or obj->JSON

 兩種Driver在處理相同設(shè)置的Object時(shí)會(huì)得到不同的JSON串,JsonHierarchicalStreamDriver得到的串更簡(jiǎn)潔,確如官網(wǎng)所說(shuō)。

JsonHierarchicalStreamDriver有個(gè)小問(wèn)題——默認(rèn)輸出帶格式的JSON串,結(jié)構(gòu)中帶空格、換行,并且沒(méi)有提供修飾方式。

3.常用方法:

xStream.toXML(object):將對(duì)象轉(zhuǎn)換成XML、Json。
xStream.toXML(obj, outputStream):將對(duì)象轉(zhuǎn)換XML、Json并封裝成輸出流。
xStream.toXML(object, writer): 將對(duì)象轉(zhuǎn)換XML、Json并封成寫(xiě)入流。
xStream.fromXML():將XML、Json轉(zhuǎn)換成對(duì)象,此方法接受File、InputStream、Reader、String、URL類(lèi)型的參數(shù)。
xStream.alias("news", News.class):為指定類(lèi)名創(chuàng)建別名。
xStream.useAttributeFor(News.class, "id"):將id設(shè)為 News的元素的屬性。
xStream.aliasField("other", BookShelf.class,"remark"):修改節(jié)點(diǎn)名稱(chēng),將BookShelf類(lèi)中的remark節(jié)點(diǎn)名修改為other。
xStream.addImplicitCollection(BookShelf.class, "books"):去掉集體節(jié)點(diǎn)的父節(jié)點(diǎn)。
xStream.aliasAttribute("姓名", "name"):修改屬性的name,為姓名。

4.實(shí)例1:將對(duì)象轉(zhuǎn)換成XML  

/** 
  * 將對(duì)象轉(zhuǎn)換成Xml格式的字符串 
  * @param object 要轉(zhuǎn)換成Xml的對(duì)象 
  * @return String:Xml格式的字符串 
  */ 
  public static String convertObject2Xml(Object object) { 
   xStream=new XStream(); 
   xStream.alias("news", News.class);//修改元素名稱(chēng) 
   xStream.useAttributeFor(News.class, "id");//將id設(shè)為News的元素的屬性 
   return xStream.toXML(object);    
  } 

5.實(shí)例2:將XML象轉(zhuǎn)換成對(duì)象

/** 
   * 將成Xml格式的字符串轉(zhuǎn)換成Java對(duì)象 
   * @param inputStream 要轉(zhuǎn)換成Java對(duì)象的inputStream 
   * @return String:Xml格式的字符串 
   */ 
  public static Object convertXml2Object(InputStream inputStream) { 
    xStream=new XStream(); 
    xStream.alias("news", News.class);//修改元素名稱(chēng) 
    xStream.useAttributeFor(News.class, "id");//將id設(shè)為News的元素的屬性 
    return xStream.fromXML(inputStream);//此方法也可將xml轉(zhuǎn)換成map 
  } 

6.實(shí)例3:將對(duì)象轉(zhuǎn)換成Json

/** 
   * 將對(duì)象轉(zhuǎn)換成Json格式的字符串 
   * @param object 要轉(zhuǎn)換成Json的對(duì)象 
   * @return String:Json格式的字符串 
   */ 
  public static String convertObject2Json(Object object) {    
      xStream = new XStream(newJsonHierarchicalStreamDriver() { 
      publicHierarchicalStreamWriter createWriter(Writer out) { 
        //刪除根節(jié)點(diǎn) 
        return new JsonWriter(out, JsonWriter.DROP_ROOT_MODE); 
      } 
    });   
    return xStream.toXML(object);    
  } 

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • Spring 注入static屬性值方式

    Spring 注入static屬性值方式

    文本介紹了Spring如何從屬性文件給static屬性注入值,在寫(xiě)一些與配置相關(guān)的工具類(lèi)時(shí)常用。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java 設(shè)計(jì)模式以虹貓藍(lán)兔的故事講解建造者模式

    Java 設(shè)計(jì)模式以虹貓藍(lán)兔的故事講解建造者模式

    建造者模式,是一種對(duì)象構(gòu)建模式 它可以將復(fù)雜對(duì)象的建造過(guò)程抽象出來(lái),使這個(gè)抽象過(guò)程的不同實(shí)現(xiàn)方法可以構(gòu)造出不同表現(xiàn)的對(duì)象。本文將通過(guò)示例講解建造者模式,需要的可以參考一下
    2022-04-04
  • Java實(shí)現(xiàn)Consul/Nacos根據(jù)GPU型號(hào)、顯存余量執(zhí)行負(fù)載均衡的步驟詳解

    Java實(shí)現(xiàn)Consul/Nacos根據(jù)GPU型號(hào)、顯存余量執(zhí)行負(fù)載均衡的步驟詳解

    這篇文章主要介紹了Java實(shí)現(xiàn)Consul/Nacos根據(jù)GPU型號(hào)、顯存余量執(zhí)行負(fù)載均衡的步驟詳解,本文分步驟結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • Spring中@ControllerAdvice注解的用法解析

    Spring中@ControllerAdvice注解的用法解析

    這篇文章主要介紹了Spring中@ControllerAdvice注解的用法解析,顧名思義,@ControllerAdvice就是@Controller 的增強(qiáng)版,@ControllerAdvice主要用來(lái)處理全局?jǐn)?shù)據(jù),一般搭配@ExceptionHandler、@ModelAttribute以及@InitBinder使用,需要的朋友可以參考下
    2023-10-10
  • Java數(shù)據(jù)結(jié)構(gòu)之隊(duì)列的簡(jiǎn)單定義與使用方法

    Java數(shù)據(jù)結(jié)構(gòu)之隊(duì)列的簡(jiǎn)單定義與使用方法

    這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)之隊(duì)列的簡(jiǎn)單定義與使用方法,簡(jiǎn)單描述了隊(duì)列的功能、特點(diǎn),并結(jié)合java實(shí)例形式分析了隊(duì)列的簡(jiǎn)單定義與使用方法,需要的朋友可以參考下
    2017-10-10
  • SpringBoot加載配置6種方式分析

    SpringBoot加載配置6種方式分析

    這篇文章主要介紹了SpringBoot加載配置6種方式分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • 使用logback實(shí)現(xiàn)日志打印過(guò)濾

    使用logback實(shí)現(xiàn)日志打印過(guò)濾

    這篇文章主要介紹了使用logback實(shí)現(xiàn)日志打印過(guò)濾的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • logback自定義日志與Nacos日志沖突問(wèn)題

    logback自定義日志與Nacos日志沖突問(wèn)題

    這篇文章主要介紹了logback自定義日志與Nacos日志沖突問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • SpringBoot+MyBatis-Flex配置ProxySQL的實(shí)現(xiàn)步驟

    SpringBoot+MyBatis-Flex配置ProxySQL的實(shí)現(xiàn)步驟

    本文主要介紹了SpringBoot+MyBatis-Flex配置ProxySQL的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • 談?wù)勎覍?duì)Spring Bean 生命周期的理解

    談?wù)勎覍?duì)Spring Bean 生命周期的理解

    Spring Bean 的生命周期在整個(gè) Spring 中占有很重要的位置,掌握這些可以加深對(duì) Spring 的理解。這篇文章主要介紹了Spring Bean 生命周期,需要的朋友可以參考下
    2018-03-03

最新評(píng)論

方正县| 濮阳县| 宜阳县| 攀枝花市| 辉南县| 三原县| 闵行区| 宿州市| 平武县| 资源县| 承德县| 临湘市| 彰武县| 阿合奇县| 休宁县| 南漳县| 马边| 麻江县| 丁青县| 理塘县| 昌邑市| 久治县| 武邑县| 宜章县| 清河县| 寻乌县| 开封县| 会昌县| 灯塔市| 乌鲁木齐县| 涟水县| 车险| 五大连池市| 孟州市| 博乐市| 巴塘县| 叶城县| 绥宁县| 招远市| 绥中县| 忻州市|