色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費注冊]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>java源碼下載>

java序列化的幾種方式

大小:0.4 MB 人氣: 2017-09-27 需要積分:1

  一.Java序列化的作用

  有的時候我們想要把一個Java對象變成字節(jié)流的形式傳出去,有的時候我們想要從一個字節(jié)流中恢復(fù)一個Java對象。例如,有的時候我們想要

  把一個Java對象寫入到硬盤或者傳輸?shù)骄W(wǎng)路上面的其它計算機,這時我們就需要自己去通過java把相應(yīng)的對象寫成轉(zhuǎn)換成字節(jié)流。對于這種通用

  的操作,我們?yōu)槭裁床皇褂媒y(tǒng)一的格式呢?沒錯,這里就出現(xiàn)了java的序列化的概念。在Java的OutputStream類下面的子類ObjectOutput-

  Stream類就有對應(yīng)的WriteObject(Object object) 其中要求對應(yīng)的object實現(xiàn)了java的序列化的接口

  為了更好的理解java序列化的應(yīng)用,我舉兩個自己在開發(fā)項目中遇到的例子:

  1)在使用tomcat開發(fā)JavaEE相關(guān)項目的時候,我們關(guān)閉tomcat后,相應(yīng)的session中的對象就存儲在了硬盤上,如果我們想要在tomcat重啟的

  時候能夠從tomcat上面讀取對應(yīng)session中的內(nèi)容,那么保存在session中的內(nèi)容就必須實現(xiàn)相關(guān)的序列化操作。

  2)如果我們使用的java對象要在分布式中使用或者在rmi遠(yuǎn)程調(diào)用的網(wǎng)絡(luò)中使用的話,那么相關(guān)的對象必須實現(xiàn)java序列化接口。

  親愛的小伙伴,大概你已經(jīng)了解了java序列化相關(guān)的作用,接下來們來看看如何實現(xiàn)java的序列化吧。~

  二。實現(xiàn)java對象的序列化和反序列化。

  Java對象的序列化有兩種方式。

  a.是相應(yīng)的對象實現(xiàn)了序列化接口Serializable,這個使用的比較多,對于序列化接口Serializable接口是一個空的接口,它的主要作用就是

  標(biāo)識這個對象時可序列化的,jre對象在傳輸對象的時候會進行相關(guān)的封裝。這里就不做過多的介紹了。

  下面是一個實現(xiàn)序列化接口的Java序列化的例子:非常簡單

  packagecom.shop.domain; importjava.util.Date;publicclassArticleimplementsjava.io.Serializable{privatestaticfinallongserialVersionUID =1L; privateInteger id; privateString title; //文章標(biāo)題privateString content; // 文章內(nèi)容privateString faceIcon; //表情圖標(biāo)privateDate postTime; //文章發(fā)表的時間privateString ipAddr; //用戶的ipprivateUser author; //回復(fù)的用戶publicInteger getId() { returnid; }publicvoidsetId(Integer id) { this.id = id; } publicString getTitle() { returntitle; }publicvoidsetTitle(String title) { this.title = title; } publicString getContent() { returncontent; }publicvoidsetContent(String content) { this.content = content; } publicString getFaceIcon() {returnfaceIcon; } publicvoidsetFaceIcon(String faceIcon) { this.faceIcon = faceIcon; }publicDate getPostTime() { returnpostTime; } publicvoidsetPostTime(Date postTime) {this.postTime = postTime; } publicUser getAuthor() { returnauthor; }publicvoidsetAuthor(User author) { this.author = author; } publicString getIpAddr() {returnipAddr; } publicvoidsetIpAddr(String ipAddr) { this.ipAddr = ipAddr; } }

  b.實現(xiàn)序列化的第二種方式為實現(xiàn)接口Externalizable,Externlizable的部分源代碼如下:

  * @seejava.io.ObjectInput * @seejava.io.Serializable * @sinceJDK1 .1*/publicinterfaceExternalizableextendsjava.io.Serializable{/** * The object implements the writeExternal method to save its contents * by calling the methods of DataOutput for its primitive values or

  沒錯,Externlizable接口繼承了java的序列化接口,并增加了兩個方法:

  - void writeExternal(ObjectOutput out) throws IOException; - void readExternal(ObjectInput in) throws IOException, ClassNotFoundException;

  首先,我們在序列化對象的時候,由于這個類實現(xiàn)了Externalizable 接口,在writeExternal()方法里定義了哪些屬性可以序列化,

  哪些不可以序列化,所以,對象在經(jīng)過這里就把規(guī)定能被序列化的序列化保存文件,不能序列化的不處理,然后在反序列的時候自動調(diào)

  用readExternal()方法,根據(jù)序列順序挨個讀取進行反序列,并自動封裝成對象返回,然后在測試類接收,就完成了反序列。

  所以說Exterinable的是Serializable的一個擴展。

  為了更好的理解相關(guān)內(nèi)容,請看下面的例子:

  packagecom.xiaohao.test; importjava.io.Externalizable; importjava.io.FileInputStream;importjava.io.FileNotFoundException; importjava.io.FileOutputStream;importjava.io.IOException; importjava.io.ObjectInput; importjava.io.ObjectInputStream;importjava.io.ObjectOutput; importjava.io.ObjectOutputStream;importjava.text.SimpleDateFormat; importjava.util.Date; /** * 測試實體類 *@author小浩 * @創(chuàng)建日期 2015-3-12 */class Person implements Externalizable{privatestaticfinallongserialVersionUID = 1L;《br》 String userName; String password; String age; publicPerson(String userName, String password, String age) { super();this.userName = userName; this.password = password; this.age = age; } publicPerson() {super(); } publicString getAge() { returnage; } publicvoidsetAge(String age) { this.age = age; } publicString getUserName() { returnuserName; } publicvoidsetUserName(String userName) { this.userName = userName; } publicString getPassword() { returnpassword; }publicvoidsetPassword(String password) { this.password = password; } /** * 序列化操作的擴展類 */@OverridepublicvoidwriteExternal(ObjectOutput out) throwsIOException { //增加一個新的對象Date date= newDate(); out.writeObject(userName); out.writeObject(password); out.writeObject(date); } /** * 反序列化的擴展類 */@OverridepublicvoidreadExternal(ObjectInput in) throwsIOException, ClassNotFoundException { //注意這里的接受順序是有限制的哦,否則的話會出錯的// 例如上面先write的是A對象的話,那么下面先接受的也一定是A對象。。.userName=(String) in.readObject(); password=(String) in.readObject(); SimpleDateFormat sdf=newSimpleDateFormat( “yyyy-MM-dd”); Date date=(Date)in.readObject(); System.out.println( “反序列化后的日期為:”+sdf.format(date)); } @OverridepublicStringtoString() { //注意這里的年齡是不會被序列化的,所以在反序列化的時候是讀取不到數(shù)據(jù)的return“用戶名:”+userName+ “密 碼:”+password+ “年齡:”+age; } } /** * 序列化和反序列化的相關(guān)操作類 *@author小浩 * @創(chuàng)建日期 2015-3-12 Java學(xué)習(xí)交流QQ群:589809992 我們一起學(xué)Java! */class Operate{ /** * 序列化方法 *@throwsIOException *@throwsFileNotFoundException */publicvoidserializable(Person person)throwsFileNotFoundException, IOException{ ObjectOutputStream outputStream=newObjectOutputStream( newFileOutputStream( “a.txt”)); outputStream.writeObject(person); } /** * 反序列化的方法 *@throwsIOException *@throwsFileNotFoundException *@throwsClassNotFoundException */publicPersondeSerializable() throwsFileNotFoundException, IOException, ClassNotFoundException{ ObjectInputStream ois= newObjectInputStream( newFileInputStream( “a.txt”));return(Person) ois.readObject(); } } /** * 測試實體主類 *@author小浩 * @創(chuàng)建日期 2015-3-12 */publicclassTest{publicstaticvoidmain(String[] args) throwsFileNotFoundException, IOException, ClassNotFoundException { Operate operate= newOperate(); Person person= newPerson( “小浩”, “123456”, “20”); System.out.println( “為序列化之前的相關(guān)數(shù)據(jù)如下:\n”+person.toString()); operate.serializable(person); Person newPerson=operate.deSerializable(); System.out.println( “-------------------------------------------------------”); System.out.println( “序列化之后的相關(guān)數(shù)據(jù)如下:\n”+newPerson.toString()); } }

  首先,我們在序列化UserInfo對象的時候,由于這個類實現(xiàn)了Externalizable 接口,在writeExternal()方法里定義了哪些屬性可

  以序列化,哪些不可以序列化,所以,對象在經(jīng)過這里就把規(guī)定能被序列化的序列化保存文件,不能序列化的不處理,然后在反序列

  的時候自動調(diào)用readExternal()方法,根據(jù)序列順序挨個讀取進行反序列,并自動封裝成對象返回,然后在測試類接收,就完成了反

  序列。

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關(guān)規(guī)定!

      ?
      主站蜘蛛池模板: 在线观看qvod| 久久re这里视频精品8| 亚洲色欲色欲综合网站| 在线 中文字幕| 日韩欧美群交P内射捆绑 | 伊人无码高清| 少妇人妻偷人精品视蜜桃| 国产黄A片在线观看永久免费麻豆 国产互换后人妻的疯狂VIDEO | 国产在线高清亚洲精品一区| 成人bt下载| 亚洲视频在线观看| 蜜桃婷婷狠狠久久综合9色| 在线视频 亚洲| 午夜国产高清精品一区免费| 免费精品在线视频| 丰满人妻按磨HD| 消息称老熟妇乱视频一区二区| 两个客户一起吃我的奶| 国产亚洲精品久久无亚洲| yellow片高清视频免费看| 中国bdsmchinesehd| 亚洲高清视频网站| 日本电影护士| 欧美日韩1区| 美女伸开两腿让我爽| 久久aa毛片免费播放嗯啊| 国产片MV在线观看| 最新国自产拍 高清完整版| 我就去色色| 久久亚洲精选| 国产精品99久久久久久宅男AV | 爱穿丝袜的麻麻3d漫画免费| 永久adc视频年龄确认| 亚洲国产在线视频精品| 老阿姨才是最有味的一区二区| 果冻传媒在线观看高清完整免费 | 国产午夜三区视频在线| 曰本熟妇乱妇色A片在线| 亚洲国产精品一区二区动图| 小小水蜜桃3视频在线观看| 十次啦中文网|