對象存儲
對象 有狀態和行為兩種屬性,行為存在於類中,而狀態存在於單獨的對象中。
讓對象可以被序列化,類必須要實現Serializable:
Serializable接口被稱為marker或tag類的標記用接口,因為此接口沒有任何方法需要實現的。他的唯一目的就是聲明實現它的類,可以被序列化的。
如果某個實例變量不能或不應該被序列化,就把他標記為transient(瞬時)的。
例:
class Chat implements Serializable{
transient String currentid;
String usename;
}
一:將序列化對象寫入文件
1:創建FileOutputStream
FileOutputStream fs = new FileOutputStream("store.ser");//如果文件不存在 他會被自動創建
2:創建ObjectOutputStream
ObjectOutputStream os = new ObjectOutputStream(fs);
3:寫入對象
os.writeObject();
4:關閉對象流
os.writeObject(new Object());//寫入實例化的對象
對象被序列化發生了什麽:
堆上的對象有狀態-實例變量的值,這些值讓同一個類的不同實例有不同的意義。
序列化的對象保存了實例變量的值,因此之後可以在堆上帶回一模一樣的實例。
二:解序列化(Deserialization):還原對象
FileInputStream fs = new FileInputStream = new FileInputStream("store".ser);
ObjectInputStream os = new ObjectInputSream(fs);
Object one = os.readObject();
Object two = os.readObject();
os.close();
對象存儲