對象中的數據 ,以流的形式,寫入到文件中保存,過程稱爲寫出對象,對象的序列化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關鍵字