1. 程式人生 > >IO流第七課物件處理流

IO流第七課物件處理流

  這節課我們來講物件處理流,首先來說說兩個概念: 序列化和反序列化

 

以下內容摘自菜鳥教程:

Java 提供了一種物件序列化的機制,該機制中,一個物件可以被表示為一個位元組序列,該位元組序列包括該物件的資料、有關物件的型別的資訊和儲存在物件中資料的型別。

 

將序列化物件寫入檔案之後,可以從檔案中讀取出來,並且對它進行反序列化,也就是說,物件的型別資訊、物件的資料,還有物件中的資料型別可以用來在記憶體中新建物件。

 

通俗來講:

將物件寫到檔案裡就叫序列化,從檔案裡讀取出一個物件叫反序列化

 

注意:

  1. 不是所有物件都可以序列化,只有實現了java.io.Serializable介面的類的物件可以被序列化 ,除此之外陣列也可以被序列化
  2. 不是物件裡的所有屬性都需要被寫入到檔案裡,對於不需要被寫入到檔案裡的屬性可以在宣告時加上transient關鍵字

 

接下來就是我們的主角了:

ObjectInputStream: 負責從檔案中讀取物件(反序列化)

ObjectOutputStream: 負責將物件寫入檔案(序列化)

 

構造器和常用方法自己去查API文件,我給個Demo大家看看就行:

 

Demo:

public class 
ObjectDisposeStream {     public static void main(String[] args) throws IOException, ClassNotFoundException {         Person person = new Person("xiaoye",20);         String filepath = "F:\\code\\java\\object.txt"
;         sera(filepath,person);         Object obj = read(filepath);         System.out.println(obj);     }     public static void sera(String filepath,Object obj) throws IOException {         File file = new File(filepath);         if (!file.exists())             file.createNewFile();         ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(file));         objectOutputStream.writeObject(obj);     }     public static Object read(String filepath) throws IOException, ClassNotFoundException {         ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(filepath));         return objectInputStream.readObject();     } } class Person implements Serializable {     private String name;     private transient int age//加上transient關鍵字表明在序列化時不需要將這個屬性的值寫入檔案     public Person(String name, int age) {         this.name = name;         this.age = age;     }     public Person(){}     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;     }     @Override     public String toString() {         return "Person{" +                 "name='" + name + '\'' +                 ", age=" + age +                 '}';     } }