• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      Java序列化技術(shù)的探討

      2011-12-27 12:06:40立,沈
      紅河學(xué)院學(xué)報(bào) 2011年4期
      關(guān)鍵詞:代碼生成序列化文檔

      晏 立,沈 銳

      (紅河學(xué)院 工學(xué)院,云南 蒙自 661100)

      Java序列化技術(shù)的探討

      晏 立,沈 銳

      (紅河學(xué)院 工學(xué)院,云南 蒙自 661100)

      對象序列化是Java中的重要技術(shù),在RMI、AJAX、Web Service等方面都有應(yīng)用。文章介紹了幾種常用的Java序列化技術(shù),并通過比較、分析這些技術(shù)在功能、序列化后的字節(jié)數(shù)和序列化/反序列化速度方面的差異,得出了在什么應(yīng)用環(huán)境下應(yīng)如何選擇序列化技術(shù)框架。

      Java; 序列化; XML; JSON

      1 序列化概述

      序列化就是一種用來處理對象流的機(jī)制,所謂對象流也就是將對象的內(nèi)容進(jìn)行流化.將對象狀態(tài)轉(zhuǎn)換成流之后,可以將其保存到文件、管道、另一進(jìn)程、通過網(wǎng)絡(luò)將對象發(fā)送到另一主機(jī),或發(fā)送到Web客戶端.對象序列化功能非常簡單、強(qiáng)大,在RMI、Socket、JMS、EJB、AJAX、Web Service都有應(yīng)用.

      1、對象序列化可以實(shí)現(xiàn)分布式對象.主要應(yīng)用例如:RMI要利用對象序列化運(yùn)行遠(yuǎn)程主機(jī)上的服務(wù),就像在本地機(jī)上運(yùn)行對象時(shí)一樣.

      2、java對象序列化不僅保留一個(gè)對象的數(shù)據(jù),而且遞歸保存對象引用的每個(gè)對象的數(shù)據(jù).可以將整個(gè)對象層次寫入字節(jié)流中,可以保存在文件中或在網(wǎng)絡(luò)連接上傳遞.利用對象序列化可以進(jìn)行對象的“深復(fù)制”,即復(fù)制對象本身及引用的對象本身.序列化一個(gè)對象可能得到整個(gè)對象序列.

      2 序列化方法介紹

      2.1 Java對象序列化

      Java 對象序列化是 JDK中引入的開創(chuàng)性特性之一,用于作為一種將 Java 對象的狀態(tài)轉(zhuǎn)換為字節(jié)數(shù)組,以便存儲或傳輸?shù)臋C(jī)制,以后,仍可以將字節(jié)數(shù)組轉(zhuǎn)換回 Java 對象原有的狀態(tài)[1].

      使用Java的對象序列化方法比較簡單,只需要把實(shí)現(xiàn)Serializable接口,該對象就可以被序列化.序列化把對象轉(zhuǎn)換成一組byte,這樣日后要用這個(gè)對象時(shí)候,就能把這些byte數(shù)據(jù)恢復(fù)出來,并重新構(gòu)建原來的對象了.

      2.2 XML

      近些年來,已經(jīng)有多個(gè) Java XML框架來簡化XML 文檔到 Java 對象圖的綁定過程.這些框架都提供了 XML 序列化和反序列化功能.這些框架封裝了XML 處理的全部工作,應(yīng)用程序代碼只需要處理普通的 Java 類.這些框架采用了兩種不同的方式:代碼生成和對象到 XML 映射.

      2.2.1 代碼生成方式

      使用代碼生成的框架有XMLBeans、JAXB、Zeus和 JBind等.這類框架首先要建立描述文檔數(shù)據(jù)類型的 XML方案,然后使用框架提供的工具,就可以生成與這些XML方案匹配的 Java 類.最后,用這些生成的類編寫應(yīng)用程序,并通過框架提供的API把數(shù)據(jù)序列化成 XML.這種類型的 XML 綁定框架在數(shù)據(jù)拆解時(shí)最有用(例如,使用 XML 文檔并把它們轉(zhuǎn)化成Java 對象).

      代碼生成方式適用于應(yīng)用程序要使用大型 XML語法,這樣的好處是不再需要定義自己的 JavaBean.但框架生成的 Java 類不能編輯.如果修改了XML方案,生成的類也要重新生成.

      2.2.2 映射方式

      采用映射方式的框架包括 JAXB[3]、XStream[2]、Castor 和 Apache Commons Betwixt.映射通常是比代碼生成更靈活和更輕量的解決方案.首先,可以像通常一樣編寫 JavaBean,包括任何行為以及任何自己喜歡的方便的方法.然后,在運(yùn)行時(shí),調(diào)用框架中基于反射的工具,并根據(jù)對象成員的類型、名稱和值生成 XML 文檔.通過定義類的映射文件,或使用注釋自定義XML生成方式.

      下面重點(diǎn)介紹JAXB和XStream:

      (1)JAXB

      JAXB(Java Architecture for XML Binding簡稱JAXB)允許Java開發(fā)人員將Java類映射為XML的框架.JAXB提供兩種主要特性:將一個(gè)Java對象序列化為XML,以及反向操作,將XML解析成Java對象.

      當(dāng)XML格式復(fù)雜且經(jīng)常變化時(shí)JAXB特別有用.在這種情況下,經(jīng)常修改XML模式定義以與Java定義保持一致很花費(fèi)時(shí)間并且容易產(chǎn)生錯(cuò)誤,而使用JAXB這種一致是自動(dòng)完成的.

      (2)XStream

      XStream 是一個(gè)輕量級的、簡單易用的開放源代碼 Java 庫,用于將 Java 對象序列化為 XML 或反序列化[2].

      使用 XStream 不用任何映射就能實(shí)現(xiàn)多數(shù) Java對象的序列化.在生成的 XML 中Java類名,變量名變成了元素名,對象中的值組成了 XML 中的元素內(nèi)容.使用 XStream 序列化的類不需要實(shí)現(xiàn) Serializable接口.XStream 是一種序列化工具而不是數(shù)據(jù)綁定工具,就是說不能從 XML 或者 XML Schema Definition(XSD) 文件生成類.和其他序列化工具相比,XStream有三個(gè)突出的特點(diǎn):

      (1)XStream 不關(guān)心序列化/逆序列化的類的字段的可見性.

      (2)序列化/逆序列化類的字段不需要 getter 和setter 方法.

      (3)序列化/逆序列化的類不需要有默認(rèn)構(gòu)造函數(shù).

      2.3 JSON

      JSON(JavaScript Object Notation) 是一種輕量級的數(shù)據(jù)交換格式.易于人閱讀和編寫,同時(shí)也易于機(jī)器解析和生成.它是基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一個(gè)子集[4].JSON采用完全獨(dú)立于語言的文本格式,這使JSON成為理想的數(shù)據(jù)交換語言.

      JSON建構(gòu)于兩種結(jié)構(gòu):

      (1)“名稱/值”對的集合.不同的語言中,它被理解為對象(object),紀(jì)錄(record),結(jié)構(gòu)(struct),字典(dictionary),哈希表(hash table),有鍵列表(keyed list),或者關(guān)聯(lián)數(shù)組(associative array).

      (2)值的有序列表(An ordered list of values).在大部分語言中,它被理解為數(shù)組(array).

      這些都是常見的數(shù)據(jù)結(jié)構(gòu).大部分現(xiàn)代計(jì)算機(jī)語言都支持它們.所以JSON可以用于不同的編程語言之間交換數(shù)據(jù),比較常見的就是在Web開發(fā)中Javascript和Java、C#間交互.

      2.4 Protocol Buffers

      Protocol Buffers是Google提供的一個(gè)開源序列化框架[6],類似于XML,JSON這樣的數(shù)據(jù)表示語言,其最大的特點(diǎn)是基于二進(jìn)制,因此比傳統(tǒng)的XML表示高效短小得多.雖然是二進(jìn)制數(shù)據(jù)格式,但并沒有因此變得復(fù)雜,開發(fā)人員通過按照一定的語法定義結(jié)構(gòu)化的消息格式,然后使用工具自動(dòng)生成相關(guān)的類.protobuf可以支持java、c++、python等語言環(huán)境.

      3 比較序列化技術(shù)

      前面已經(jīng)介紹了把 Java 序列化的4種不同技術(shù).每種技術(shù)都有自己的優(yōu)勢和不足,分別適用于不同的應(yīng)用程序架構(gòu).下面從功能和效率上比較了這些序列化技術(shù).

      硬件環(huán)境:CPU: Pentium T4300, RAM: 4G;

      軟件環(huán)境:JDK 1.6.021

      用于測試的類有兩個(gè)分別是:Person和PhoneNumber,類UML圖如圖1所示,功能比較的結(jié)果如表1所示.

      圖1 測試類Person和PhoneNumber

      表1 Java序列化功能比較

      效率測試時(shí),每類測試執(zhí)行10組,每組共執(zhí)行序列化和反序列化操練100,000次,去掉最快和最慢的兩組,對剩下的8組取平均,結(jié)果如表2所示.

      表2 Java序列化效率比較

      4 結(jié)論

      前面的測試數(shù)據(jù)并不表明某項(xiàng)序列化技術(shù)比其他的技術(shù)好.畢竟不同標(biāo)準(zhǔn)的相對重要性取決于項(xiàng)目的具體情況.例如,如果要處理數(shù)百種數(shù)據(jù)類型,這時(shí)想要的是可伸縮性,那么使用JAXB或Protocol Buffers的代碼生成可能就是最好的選擇.如果處理的是小規(guī)模項(xiàng)目,想降低需要編寫的 JavaScript 代碼數(shù)量,那么JSON是比較好的選擇.如果要跨平臺交換數(shù)據(jù),XML或Protocol Buffers是比較好的選擇,如果效率的要求比較高Protocol Buffers是最好的.

      [1] JAVA API.http://java.sun.com/javase/6/docs/api/ 2010.

      [2] XStream.http://xstream.codehaus.org/.

      [3] JAXB.http://jaxb.java.net/.

      [4] JSON.http://www.json.org/.

      [5] Jackson.http://jackson.codehaus.org/.

      [6] Protocol Buffers.http://code.google.com/apis/protocolbuffers/.

      Java Serialization Technology

      YAN Li SHEN Rui
      (Engineering College, Honghe University, Mengzi 661100, China)

      Object serialization is an important technology of Java, which is used in RMI, AJAX, Web Service, etc.This paper introduces several common techniques of Java serialization, by comparing and analyzing the differences of these techniques in function,space consumption after serialization, speed of serialization/deserialization, and getting how to choose the framework of serialization technology in what kind of application environment.

      Java; serialization; XML; JSON

      TP3

      A

      1008-9128(2011)04-0037-03

      2011-05-02

      晏立(1974-),男,云南個(gè)舊人,工學(xué)碩士.研究方向:計(jì)算機(jī)網(wǎng)絡(luò)、P2P、軟件工程研究.

      [責(zé)任編輯 張燦邦]

      猜你喜歡
      代碼生成序列化文檔
      有人一聲不吭向你扔了個(gè)文檔
      如何建構(gòu)序列化閱讀教學(xué)
      甘肅教育(2020年14期)2020-09-11 07:58:36
      Lustre語言可信代碼生成器研究進(jìn)展
      基于RI碼計(jì)算的Word復(fù)制文檔鑒別
      論初中語文作文的序列化訓(xùn)練
      代碼生成技術(shù)在軟件開發(fā)中的應(yīng)用
      電子世界(2016年15期)2016-08-29 02:14:28
      Java 反序列化漏洞研究
      Persistence of the reproductive toxicity of chlorpiryphos-ethyl in male Wistar rat
      基于XML的代碼自動(dòng)生成工具
      電子科技(2015年2期)2015-12-20 01:09:20
      作文訓(xùn)練微格化、序列化初探
      語文知識(2015年12期)2015-02-28 22:02:15
      兰溪市| 合江县| 兴海县| 来安县| 元江| 萝北县| 阆中市| 宁陕县| 烟台市| 石嘴山市| 鄂托克前旗| 巨野县| 革吉县| 轮台县| 托克托县| 普陀区| 商丘市| 广安市| 会宁县| 淮安市| 山东省| 灌阳县| 永平县| 板桥市| 大安市| 西青区| 棋牌| 玛曲县| 民乐县| 马鞍山市| 武宁县| 临泽县| 遂昌县| 五原县| 桓仁| 扎鲁特旗| 呼伦贝尔市| 西充县| 高雄市| 平南县| 慈溪市|