1. 程式人生 > >JAVA基礎之序列化與反序列化

JAVA基礎之序列化與反序列化

步驟 per 文件 color 字節 [] ati input des

序列化和反序列化:

  把對象轉化為字節序列的過程稱為序列化;

  把字節序列恢復為對象的過程稱為對象的反序列化;

方法:

  Java.io.ObjectOutputStream代表對象的輸出流,writeObject(Object obj)方法對參數對象進行序列化,把得到的字節序列寫到一個目標輸出流中。

  Java.io.ObjectInputStream代表對象的輸入流,readObject()方法可以從一個源輸入流中讀取字節序列,並轉化為一個對象,將其返回。

  只有實現Serializable和Externalizable接口的類的對象才能被序列化。

  Externalizable接口繼承自 Serializable接口,實現Externalizable接口的類完全由自身來控制序列化的行為,而僅實現Serializable接口的類可以 采用默認的序列化方式 。
  對象序列化包括如下步驟:
  1) 創建一個對象輸出流,它可以包裝一個其他類型的目標輸出流,如文件輸出流;
  2) 通過對象輸出流的writeObject()方法寫對象。
  對象反序列化的步驟如下:
  1) 創建一個對象輸入流,它可以包裝一個其他類型的源輸入流,如文件輸入流;
  2) 通過對象輸入流的readObject()方法讀取對象。

實例:

 1 import java.io.File;
 2 import java.io.FileInputStream;
 3 import java.io.FileNotFoundException;
 4 import java.io.FileOutputStream;
 5 import java.io.IOException;
 6 import java.io.ObjectInputStream;
 7 import java.io.ObjectOutputStream;
 8 import java.io.Serializable;
 9 import java.text.MessageFormat;
10 11 12 class Person implements Serializable{ 13 private int age; 14 public int getAge() { 15 return age; 16 } 17 public void setAge(int age) { 18 this.age = age; 19 } 20 public String getName() { 21 return name; 22 } 23 public void setName(String name) {
24 this.name = name; 25 } 26 private String name; 27 } 28 public class test { 29 public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException 30 { 31 SerialiablePerson(); 32 Person p=DeserializePerson(); 33 System.out.println(MessageFormat.format("name={0},age={1}",p.getName(),p.getAge())); 34 }
      //反序列化的過程,從字節序列文件讀出並返回
35 public static Person DeserializePerson() throws FileNotFoundException, IOException, ClassNotFoundException{ 36 ObjectInputStream in=new ObjectInputStream(new FileInputStream(new File("E://person.txt"))); 37 Person p=(Person)in.readObject(); 38 return p; 39 }
     //序列化的過程,將字節存到E://Person.txt中
40 public static void SerialiablePerson() throws FileNotFoundException, IOException { 41 Person p=new Person(); 42 p.setAge(15); 43 p.setName("姓氏"); 44 45 ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream(new File("E://Person.txt"))); 46 out.writeObject(p); 47 out.close(); 48 } 49 50 }

JAVA基礎之序列化與反序列化