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

您好,歡迎來電子發燒友網! ,新用戶?[免費注冊]

您的位置:電子發燒友網>源碼下載>java源碼下載>

java序列化的幾種方式

大?。?/span>0.4 MB 人氣:0 2017-09-27 需要積分:1

  一.Java序列化的作用

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

  把一個Java對象寫入到硬盤或者傳輸到網路上面的其它計算機,這時我們就需要自己去通過java把相應的對象寫成轉換成字節流。對于這種通用

  的操作,我們為什么不使用統一的格式呢?沒錯,這里就出現了java的序列化的概念。在Java的OutputStream類下面的子類ObjectOutput-

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

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

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

  時候能夠從tomcat上面讀取對應session中的內容,那么保存在session中的內容就必須實現相關的序列化操作。

  2)如果我們使用的java對象要在分布式中使用或者在rmi遠程調用的網絡中使用的話,那么相關的對象必須實現java序列化接口。

  親愛的小伙伴,大概你已經了解了java序列化相關的作用,接下來們來看看如何實現java的序列化吧。~

  二。實現java對象的序列化和反序列化。

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

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

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

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

  packagecom.shop.domain; importjava.util.Date;publicclassArticleimplementsjava.io.Serializable{privatestaticfinallongserialVersionUID =1L; privateInteger id; privateString title; //文章標題privateString content; // 文章內容privateString faceIcon; //表情圖標privateDate postTime; //文章發表的時間privateString ipAddr; //用戶的ipprivateUser author; //回復的用戶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.實現序列化的第二種方式為實現接口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;

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

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

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

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

  為了更好的理解相關內容,請看下面的例子:

  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小浩 * @創建日期 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() { //注意這里的年齡是不會被序列化的,所以在反序列化的時候是讀取不到數據的return“用戶名:”+userName+ “密 碼:”+password+ “年齡:”+age; } } /** * 序列化和反序列化的相關操作類 *@author小浩 * @創建日期 2015-3-12 Java學習交流QQ群:589809992 我們一起學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小浩 * @創建日期 2015-3-12 */publicclassTest{publicstaticvoidmain(String[] args) throwsFileNotFoundException, IOException, ClassNotFoundException { Operate operate= newOperate(); Person person= newPerson( “小浩”, “123456”, “20”); System.out.println( “為序列化之前的相關數據如下:\n”+person.toString()); operate.serializable(person); Person newPerson=operate.deSerializable(); System.out.println( “-------------------------------------------------------”); System.out.println( “序列化之后的相關數據如下:\n”+newPerson.toString()); } }

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

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

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

  序列。

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

用戶評論

      ?
      主站蜘蛛池模板: 国产视频这里只有精品 | 欧美美女性生活 | 中文人妻熟妇精品乱又伧 | 天堂视频在线观看免费完整版 | 成都电影免费中文高清 | 伊人久久久久久久久久 | 人淫阁| 亚洲免费网站在线观看 | 精品AV综合导航 | xxx日本高清视频hd | 一区二区中文字幕在线观看 | 亚洲 欧美 另类 中文 在线 | 男人桶女人j的视频在线观看 | 午夜男女爽爽羞羞影院在线观看 | 回复术士勇者免费观看全集 | 精品视频免费在线 | 男生射女生 | 素人约啪第五季 | 99精品视频在线观看 | 欧美激情精品久久久久久不卡 | 免费视频国产在线观看网站 | 日韩亚洲欧洲在线rrrr片 | 亚洲国语在线视频手机在线 | 无码AV免费精品一区二区三区 | 亚洲一区国产 | 麻豆AV无码蜜臀AV色哟 | 亚洲精品成A人在线观看 | 无遮挡午夜男女XX00动态 | 国产欧美日韩网站 | 中文字幕亚洲视频 | 国产AV99激情久久无码天堂 | 年轻的的小婊孑2中文字幕 你是淫荡的我的女王 | 国产欧美国日产在线播放 | 亚洲女初尝黑人巨磁链接 | 伊人成综合网伊人222 | 中文字幕亚洲欧美日韩2o19 | 啊轻点啊再深点视频免费 | 男男肉肉互插腐文 | qvod 电影 | 大乳牛奶女magnet | 娇妻玩4P被三个男人伺候电影 |