1)Person p = new Person("小美女", 18);
目標: 保存到硬盤的person.txt文件中
2)序列化 ObjectOutputStream:
把對象以流的方式,寫入到文件中保存,即寫對象,也叫對象的序列化;
對象中包含的不僅僅是字符,還有字節,因此要使用`字節流`;
ObjectOutputStream: 對象的序列化流:
writeObject(p): 寫對象就可以寫進來, 實際上 我們看不懂在硬盤上保存的是什麼;
2)反序列化 ObjectInputStream:
把文件中保存的對象,以流的方式讀取出來,叫做讀對象,也叫作反序列化;
讀取的文件保存的都是字節,使用字節流;
ObjectInputStream:
readObject:
注意:我寫的時候可以寫任意的對象,讀的時候,既可以讀Person也可以讀Student,
因此讀出來的返回值是Object;
3)異常:
必須實現Serializable序列化接口纔可以被序列和反序列化;
是標記性接口;
4)瞬態關鍵字: transient
和靜態的功能差不多,但是沒有靜態的含義;
static關鍵字: 靜態關鍵字
靜態優先非靜態加載到內存中;
被序列化的都是對象,靜態的成員無法序列化;
5)序列號衝突
class文件會自動添加序列號;
我們可以自動添加一個序列化號
static final long serialVersionUID = 42; 即可,避免InvalidClassException;
不管類是否修改,序列號不變;
6)可以序列化和反序列化集合
我們想在文件中保存多個對象的時候,
可以將多個對象存儲到一個集合中,
對集合進行序列化和反序列化;