JAVA基礎之序列化與反序列化
阿新 • • 發佈:2018-03-26
步驟 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基礎之序列化與反序列化