標籤: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)