儲存Java程式狀態及設定之物件序列化
在程式中,我們需要儲存一個視窗的位置,讓程式在下次啟動的時候,仍然保持在上一次關閉的時候的位置,或程式需要將資料庫連線的配置儲存下來。
其中一種方法就是使用物件序列化儲存。首先,簡單解釋一下序列化的含義:在Java程式中,物件是存在於記憶體中的,序列化就是將這個物件在記憶體中的形態變成位元組流,然後輸入到一個文件中,這樣就將一個物件固定下來,不會隨程式的關閉而消失。我們建立一個能夠序列化的類,注意,在Java中,並不是每個類都能夠實現序列化的,要實現java.io.Serializable介面的類才能夠序列化。
public class ProgramSave implements java.io.Serializable{
private int height;
private int width;
private int left;
private int top;
public ProgramSave(){
height=200;
width=200;
left=0;
top=0;
}
public int getHeight(){
return height;
}
public void setHeight(int hei){
height=hei;
}
……
程式中用4個屬性來儲存程式的狀態,並且宣告多個方法來儲存和獲取屬性。上面的程式只寫了一個獲取和儲存的方法,其他的類似。
當程式退出的時候,在退出前,我們要先儲存程式的狀態,將下面的方法新增到程式退出前,執行完下面的程式碼後在退出程式。
//建立一個能夠序列化的物件
ProgramSave save = new ProgramSave();
save.setHeight(視窗的高);
……
這樣將程式的狀態儲存到save這個物件中,但是,現在程式的狀態只是儲存在記憶體中,因為sava這個物件現在仍然是在記憶體中的。下面建立一個文件,並把save物件儲存到這個文件中。
//建立文件物件
File file = new File(“mysave.save”);
file.createNewFile();
//獲取文件的位元組流物件
FileOutputStream bytetOut = new FileOutputStream(file);
ObjectOutputStream outer = new ObjectOutputStream(bytetOut)
//將save物件寫入
outer.writeObject(save);
outer.flush();
outer.close();
到此,save物件,就被儲存到文件中了。
在程式啟動的時候,相反,我們要將mysave.save中的物件重新載入到記憶體中,然後獲取其中儲存的height等值,再調整視窗的位置。
在視窗物件初始化的時候,載入物件。
//獲取文件物件
File f=new File(“mysave.save”);
FileInputStream byteOut = new FileInputStream(f);
ObjectInputStream out = new ObjectInputStream(byteOut);
//將文件物件中的位元組流讀出來,並儲存在記憶體中的mySet物件中
ProgramSave mySet = (SystemSave) out.readObject();
out.close();
byteOut.close();
後面就能夠通過mySet.getHeight()等方法來獲取儲存的資料,然後再將視窗的高等屬性配置為這個獲取的值。
更多關於JAVA乾貨掃描微信二維碼新增好友!