Java學習筆記32(IO:序列化流)

對象中的數據 ,以流的形式,寫入到文件中保存,過程稱爲寫出對象,對象的序列化java

  ObjectOutputStream將對象寫到序列中,實現序列化ide

在文件中,以流 的形式,將對象讀取出來,過程稱爲讀取對象,對象的反序列化測試

  ObjectInputStream將文件對象讀取出來,實現反序列化this

示例:spa

package com.zs.Demo; import java.io.Serializable; public class Person implements Serializable { private String name;
  //age不會被序列化
private transient int age; public Person(String name, int age) { this.name = name; this.age = age; } public Person() { super(); } 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 + '}'; } }

測試類:code

package com.zs.Demo; import java.io.*; public class Demo { public static void main(String[] args) { try { fun(); fun2(); } catch (Exception e) { e.printStackTrace(); } } //反序列化流
    private static void fun2() throws Exception { //建立文件輸入流對象
        FileInputStream f=new FileInputStream("h:\\a.txt"); //建立反序列化流對象
        ObjectInputStream os=new ObjectInputStream(f); //讀文件中的對象
        Object obj = os.readObject(); System.out.println(obj); //關閉流
 os.close(); } //對象的序列化,將對象存到文件中
    private static void fun() throws IOException { //建立文件輸出流對象
        FileOutputStream f=new FileOutputStream("h:\\a.txt"); //建立序列化流對象
        ObjectOutputStream os=new ObjectOutputStream(f); //建立對象
        Person p=new Person("張三",18); //將對象寫到文件中
 os.writeObject(p); //關閉序列化流
 os.close(); } }

注意事項:對象

  1.對象若要序列化,對象類必須實現Serializable接口(類經過實現 java.io.Serializable 接口以啓用其序列化功能。未實現此接口的類將沒法使其任何狀態序列化或反序列化。)blog

    這個接口沒有方法,稱爲標記性接口,起到標記做用,只有別標記的類才能夠序列化;接口

  2.靜態不能夠序列化:給age加上static修飾符,而後序列化,發現輸出age=0get

     緣由:對象序列化,而靜態不屬於對象,屬於類,對象不包含靜態,因此靜態不能序列化,爲零緣由是靜態變量默認爲0;

  2.transient關鍵字,阻止成員變量序列化,若是不想讓變量序列化,又不能使用靜態修飾符,就用transient關鍵字

相關文章
相關標籤/搜索