? ? java序列化著實(shí)令人困惑。找了一些博客看發(fā)現(xiàn)好多內(nèi)容都一樣。誒,但是讓我找到了一篇講的比較明白的文章。https://blog.csdn.net/qq_32575047/article/details/80070590?
? ? 嗯,還是得讓自己寫一寫,不然我過不了多久就會(huì)忘。
? ? 什么是序列化?我的理解,就是將對(duì)象寫入文件,該文件在你以文本形式閱讀是無意義的(因?yàn)榭床幻靼?,一大堆奇怪的符?hào)),并且Java虛擬機(jī)是可以將文件中的對(duì)象還原的,恢復(fù)至當(dāng)時(shí)的狀態(tài)。就如同游戲人物中的道具,等級(jí),經(jīng)驗(yàn)等東西,如果在關(guān)閉游戲后這些東西都沒了,得從頭開始。說實(shí)話勸退大多數(shù)人。但是,重新打開游戲后,對(duì)象的狀態(tài)可以恢復(fù),道具,等級(jí),經(jīng)驗(yàn)都會(huì)回復(fù)到原來的狀態(tài),就挺人性化的。
? ? 代碼: ??
????import java.io.*;
//引入實(shí)現(xiàn)io的庫
public class demo5 implements Serializable{
private int width;
private int height;
public void setWidth(int w){
width=w;
}
public void setHeight(int h){
height=h;
}
public static void main(String [] args){
demo5 demo =new demo5();
demo.setWidth(20);
demo.setHeight(50);
//當(dāng)對(duì)象被實(shí)例化時(shí),該對(duì)象引用的實(shí)例對(duì)象也會(huì)被實(shí)例化。且所有被引用的對(duì)象也會(huì)被實(shí)例化。操作實(shí)現(xiàn)時(shí)自動(dòng)進(jìn)行的。
try{
FileOutputStream? fs=new FileOutputStream("foo.ser");
//將文件寫入規(guī)定的文件夾,如果沒有文件夾就會(huì)創(chuàng)建一個(gè)新的文件夾
ObjectOutputStream os=new ObjectOutputStream(fs);
//將對(duì)象轉(zhuǎn)換成可以寫入的數(shù)據(jù)
os.writeObject(demo);
//寫入對(duì)象
os.close();
//關(guān)閉方法,且釋放內(nèi)存
} catch(Exception ex){
ex.printStackTrace();
}
}
? ? 結(jié)果:

注意的東西:1、首先類要實(shí)現(xiàn)Serializable接口
? ? ? ? ? ? ? ? ? ? ? 2、transient標(biāo)注的變量,序列化時(shí)會(huì)被跳過
? ? ? ? ? ? ? ? ? ? ? 3、類序列化被還原之后,由于transient標(biāo)注的變量在序列化時(shí)被跳過了,所以會(huì)給個(gè) 默認(rèn)值? null。primitive主數(shù)據(jù)類型數(shù)據(jù)的默認(rèn)值為0、false.
? ? ? ? ? ? ? ? ? ? ? 4、當(dāng)對(duì)象被實(shí)例化時(shí),該對(duì)象引用的實(shí)例對(duì)象也會(huì)被實(shí)例化。且所有被引用的對(duì)象也會(huì)被實(shí)例化。
? ? 說句實(shí)在話,我在看書看博客后,自己寫一遍,還是有些東西寫不出來。歡迎大家指正,互相交流學(xué)習(xí)。