今天看書學了個貌似很牛逼的東西,可以用ObjectOutputStream把對象寫入文件,可以用ObjectInputStream從文件讀取對象。
作為菜鳥,我淺顯的認為,這是個非常有用的功能。比如,打開一個應用程序,它有窗口,必然是個對象,窗口的位置,大小,還有內部控件的擺放位置,肯定是在對象中由成員屬性來設置的,如果在關閉程序之前,將這個對象寫入文件,當下次再打開這個軟件的時候,讀取這個文件中的對象,這樣,就記錄了用戶的個人習慣,是一個不錯的功能。當然,還可能通過改注冊表什麼的來實現這樣的機制。有些習慣還可以直接存儲到服務器的數據庫上,這些都是可以的。
這裡,把代碼再敲一敲,復習鞏固一下。
先寫一個最常用的Employee類,它必須實現一個Serializable接口,才能被序列化。代碼如下:
class Employee implements Serializable
{
private String name;
private double salary;
public Employee(String aName, double aSalary)
{
this.name = aName;
this.salary = aSalary;
}
public String toString()
{
return "name = " + this.name + " salary = " + this.salary;
}
}
接下來主函數裡寫上調試的代碼,代碼如下:
try {
//構造兩個對象
Employee e1 = new Employee("kross", 123);
Employee e2 = new Employee("ghost", 567.55);
//打開一個對象輸出流
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("object.txt"));
//把兩個對象一次寫入
out.writeObject(e1);
out.writeObject(e2);
//打開一個對象輸入流
ObjectInputStream in = new ObjectInputStream(new FileInputStream("object.txt"));
//通過輸入流把讀到的對象傳入e3
Employee e3 = (Employee) in.readObject();
//調用下toString()方法
System.out.println(e3.toString()); //結果:name = kross salary = 123.0
} catch(IOException e) {
}