1. 程式人生 > >序列化流與反序列化流

序列化流與反序列化流

序列化是把物件特性儲存到物理介質上,反序列化是把儲存在物理介質上的物件取出還原成物件。

能被序列化的物件所屬的類必須實現Serializable介面。

1、物件序列化流ObjectOutputStream

構造方法:

ObjectOutputStream(OutputStream out):建立寫入指定OutputStream的ObjectOutputStream

方法:

void writeObject(Object obj):將指定的物件寫入ObjectOutputStream

Person類

 1 package io;
 2 
 3 import java.io.Serializable;
4 5 public class Person implements Serializable { 6 private String name; 7 private int age; 8 9 public Person() { 10 super(); 11 } 12 13 public Person(String name, int age) { 14 super(); 15 this.name = name; 16 this.age = age; 17 }
18 19 public String getName() { 20 return name; 21 } 22 23 public void setName(String name) { 24 this.name = name; 25 } 26 27 public int getAge() { 28 return age; 29 } 30 31 public void setAge(int age) { 32 this.age = age; 33 } 34 35
@Override 36 public String toString() { 37 return "Person [name=" + name + ", age=" + age + "]"; 38 } 39 40 }
 1 package io;
 2 
 3 import java.io.FileOutputStream;
 4 import java.io.IOException;
 5 import java.io.ObjectOutputStream;
 6 
 7 public class ObjectOutputStreamDemo {
 8 
 9     public static void main(String[] args) throws IOException {
10         // 建立關聯資料來源的位元組輸出流物件
11         FileOutputStream fos = new FileOutputStream("e:\\javaIOTest\\per.txt");
12         // 給操作檔案的位元組輸出流新增寫入物件功能
13         ObjectOutputStream oos = new ObjectOutputStream(fos);
14         // 呼叫寫入物件方法
15         oos.writeObject(new Person("alphajuns", 23));
16         // 關閉資源
17         oos.close();
18     }
19 
20 }

2、物件反序列化流ObjectInputStream

構造方法:

ObjectInputStream(InputStream in):建立從指定InputStream讀取的ObjectInputStream

方法:

readObject():從ObjectInputStream讀取物件

 1 package io;
 2 
 3 import java.io.FileInputStream;
 4 import java.io.IOException;
 5 import java.io.ObjectInputStream;
 6 
 7 public class ObjectInputStreamDemo {
 8 
 9     public static void main(String[] args) throws IOException, ClassNotFoundException {
10         // 建立關聯資料來源的位元組輸入流
11         FileInputStream fis = new FileInputStream("e:\\javaIOTest\\per.txt");
12         // 建立讀取物件的反序列化流
13         ObjectInputStream ois = new ObjectInputStream(fis);
14         // 讀取物件
15         Person obj = (Person) ois.readObject();
16         System.out.println(obj.toString());
17         // 關閉資源
18         ois.close();
19     }
20 
21 }