国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

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

晏 立,沈 銳

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

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

晏 立,沈 銳

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

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

Java; 序列化; XML; JSON

1 序列化概述

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

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

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

2 序列化方法介紹

2.1 Java對象序列化

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

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

2.2 XML

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

2.2.1 代碼生成方式

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

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

2.2.2 映射方式

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

下面重點介紹JAXB和XStream:

(1)JAXB

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

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

(2)XStream

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

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

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

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

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

2.3 JSON

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

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

(1)“名稱/值”對的集合.不同的語言中,它被理解為對象(object),紀錄(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)代計算機語言都支持它們.所以JSON可以用于不同的編程語言之間交換數(shù)據(jù),比較常見的就是在Web開發(fā)中Javascript和Java、C#間交互.

2.4 Protocol Buffers

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

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

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

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

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

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

圖1 測試類Person和PhoneNumber

表1 Java序列化功能比較

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

表2 Java序列化效率比較

4 結(jié)論

前面的測試數(shù)據(jù)并不表明某項序列化技術(shù)比其他的技術(shù)好.畢竟不同標準的相對重要性取決于項目的具體情況.例如,如果要處理數(shù)百種數(shù)據(jù)類型,這時想要的是可伸縮性,那么使用JAXB或Protocol Buffers的代碼生成可能就是最好的選擇.如果處理的是小規(guī)模項目,想降低需要編寫的 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-),男,云南個舊人,工學碩士.研究方向:計算機網(wǎng)絡(luò)、P2P、軟件工程研究.

[責任編輯 張燦邦]

猜你喜歡
代碼生成序列化文檔
有人一聲不吭向你扔了個文檔
如何建構(gòu)序列化閱讀教學
甘肅教育(2020年14期)2020-09-11 07:58:36
Lustre語言可信代碼生成器研究進展
基于RI碼計算的Word復制文檔鑒別
論初中語文作文的序列化訓練
代碼生成技術(shù)在軟件開發(fā)中的應用
電子世界(2016年15期)2016-08-29 02:14:28
Java 反序列化漏洞研究
Persistence of the reproductive toxicity of chlorpiryphos-ethyl in male Wistar rat
基于XML的代碼自動生成工具
電子科技(2015年2期)2015-12-20 01:09:20
作文訓練微格化、序列化初探
語文知識(2015年12期)2015-02-28 22:02:15
科尔| 沅江市| 布拖县| 高要市| 清流县| 博罗县| 和平区| 印江| 甘洛县| 河北省| 中方县| 类乌齐县| 深圳市| 平塘县| 马公市| 长阳| 奉化市| 应城市| 北流市| 钟祥市| 富阳市| 门源| 黄梅县| 临江市| 柳河县| 鄯善县| 内黄县| 鸡泽县| 册亨县| 牙克石市| 汶川县| 历史| 栖霞市| 砚山县| 库伦旗| 龙口市| 孝感市| 东兰县| 临沂市| 明水县| 龙胜|