若是要讓類可以被序列化,就實現Serializable接口。this
簡單例子:spa
public class Dog implements Serializable{
//若是某實例變量不能或不該該被序列化,就把它標記爲transient的。當經過被還原序列化的類獲得它時,其值會爲null。當去掉該標記獲得的name仍是原來的。
transient String name;
public Dog(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
對象
public class Test1 {
public static void main(String[] args) {
try {
FileOutputStream fileOutputStream=new FileOutputStream("game.ser");
ObjectOutputStream objectOutputStream=new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(new Dog("lele"));
System.out.println("寫入成功");
FileInputStream fileInputStream=new FileInputStream("game.ser");
ObjectInputStream objectInputStream=new ObjectInputStream(fileInputStream);
Dog dog=(Dog) objectInputStream.readObject();
System.out.println("讀取結果:");
System.out.println("dog name is"+dog.getName());
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
接口
對象的序列化:get
1.你能夠經過序列化來存儲對象的狀態。it
2.使用ObjectOutputStream來序列化對象io
3.用fileoutputstream連接objectoutputStream來將對象序列化到文件上。class
4.對象必須實現序列化接口才能被序列化。若是付烈實現了序列化,則子類也就自動地有實現,而無論是否有明確的聲明。stream
5.除非該實例變量被標記爲transient不然,該變量被還原的時候會被賦予爲null或primitive住數據類型的默認值。變量
6.讀取對象的順序必須與寫入對象的順序相同。
7.靜態變量不會被實例化。由於全部的對象都是哦你共享同一份靜態變量值。