女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

java序列化的幾種方式

大小:0.4 MB 人氣: 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%

      發表評論

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

      發表評論,獲取積分! 請遵守相關規定!

      ?