Java對象序列化與還原序列化(1)

來源:互聯網
上載者:User

標籤:javase   io流   序列化   還原序列化   serializable   

序列化機制允許將實現序列化的Java對象轉換為位元組序列,這些位元組序列可以被儲存在磁碟上,或通過網路傳輸,以備以後重新恢複成原來的對象。序列化機制使得對象可以脫離程式的運行而獨立存在。

對象的序列化(Serialize)指將一個Java對象寫入IO流中,與此對應的是,對象的還原序列化(Deserialize)則指從IO流中恢複該Java對象。如果需要讓某個對象可以支援序列化機制,必須讓它的類是可序列化的(serializable),為了讓某個類是可序列化的,該類必須實現如下兩個介面之一:

(1)Serializable
(2)Externalizable


一旦某個類實現了Serializable介面,則該類的對象就是可序列化的,程式可以通過如下兩個步驟來序列化該對象。
序列化的步驟:
(1)建立一個ObjectOutputStream,這個輸出資料流是一個處理流,所以必須建立在其他節點流的基礎之上。
(2)調用ObjectOutputStream對象的writeObject方法輸出可序列化對象。


還原序列化的步驟:
(1)建立一個ObjectInputStream,這個輸入資料流是一個處理流,所以必須建立在其他節點流的基礎之上。 

(2)調用ObjectInputStream對象的readObject對象讀取流中的對象,該方法返回一個Object類型的Java對象,如果程式知道該Java對象的類型,則可以將該對象強制類型轉換成其真實的類型。 


下面僅以實現Serializable介面為例,以一個完整的執行個體示範序列化與還原序列化的過程:

1. Person.java

import java.io.Serializable;public class Person implements Serializable{private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Person(String name, int age) {super();this.name = name;this.age = age;}}

2.WritePerson.java

import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectOutputStream;public class WritePerson {public static void main(String[] args) {//建立ObjectOutputStream(處理流,必需建立在其他節點流之上)對象try {ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("per.txt"));Person per=new Person("張三",18);oos.writeObject(per);oos.close();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

3. ReadPerson .java

public class ReadPerson {public static void main(String[] args) {try(ObjectInputStream ois=new ObjectInputStream(new FileInputStream("per.txt"))){Person per=(Person)ois.readObject();System.out.println(per.getName()+"-----------"+per.getAge());} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

在JavaEE中,一般要求每個JavaBean都是可序列化的。序列化機制在JavaEE的開發中非常重要。希望可以引起讀者重視。



Java對象序列化與還原序列化(1)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.