文章摘錄的
不想把別人的東西佔為己有,但是想方便日後參考還是摘錄了。
煩死了,看Java編程思想三或者四,感覺老外寫書跟我們看書的習慣都不一樣的,總感覺老外寫的東西就像是在寫手冊,全面但是煩瑣。
【原則】不要告訴我曆史,告訴我怎麼做就行了。
【事實】輸出輸入類,就是TMD的簡單,為什麼非要弄成手冊,讓我這個菜鳥看不懂
【鳴謝】中國IT實驗室的總結篇
——————————————————————————————————————————————————
物件流程 • 對象的持久性(Persistence)
– 能夠紀錄自己的狀態一邊將來再生的能力,叫對象的持久性
• 對象的序列化(Serialization)
– 對象通過寫出描述自己狀態的的數值來記錄自己的過程叫序列化。序列化的主要任務是寫出對象執行個體變數的數值,如果變數是另一個對象的引用,則引用的對象也要序列化。這個過程是遞迴的
• 物件流程
– 能夠輸入輸出對象的流稱為物件流程。
– 可以將對象序列化後通過對象輸入輸出資料流寫入檔案或傳送到其它地方
在java中,允許可序列化的對象在通過物件流程進行傳輸。只有實現Serializable介面的類才能被序列化, Serializable介面中沒有任何方法,當一個類聲明實現Serializable介面時,只是表明該類加入對象序列化協議
要序列化一個對象,必須與一定的對象輸出/輸入資料流聯絡起來,通過對象輸出資料流將對象狀態儲存下來(將對象儲存到檔案中,或者通過網路傳送到其他地方) ,再通過對象輸入資料流將對象狀態恢複
類ObjectOutputStream和ObjectInputStream分別繼承了介面ObjectOutput和ObjectInput,將資料流功能擴充到可以讀寫對象,前者用writeObject()方法可以直接將對象儲存到輸出資料流中,而後者用readObject()方法可以直接從輸入資料流中讀取一個對象
例 8.10 物件流程。
本例聲明Student2為序列化的類。Save方法中,建立對象輸出資料流out,並以添加方式向檔案中直接寫入當前對象out.writeObject(this);display方法中,建立對象輸入資料流in,從檔案中直接讀取一個對象in.readObject(),獲得該對象的類名、介面名等屬性,並顯示其中的成員變數。程式如下:
import java.io.*;
public class Student2 implements Serializable //序列化
{
int number=1;
String name;
Student2(int number,String n1)
{
this.number = number;
this.name = n1;
}
Student2()
{
this(0,"");
}
void save(String fname)
{
try
{
FileOutputStream fout = new FileOutputStream(fname);
ObjectOutputStream out = new ObjectOutputStream(fout);
out.writeObject(this); //寫入對象
out.close();
}
catch (FileNotFoundException fe){}
catch (IOException ioe){}
}
void display(String fname)
{
try
{
FileInputStream fin = new FileInputStream(fname);
ObjectInputStream in = new ObjectInputStream(fin);
Student2 u1 = (Student2)in.readObject(); //讀取對象
System.out.println(u1.getClass().getName()+" "+
u1.getClass().getInterfaces()[0]);
System.out.println(" "+u1.number+" "+u1.name);
in.close();
}
catch (FileNotFoundException fe){}
catch (IOException ioe){}
catch (ClassNotFoundException ioe) {}
}
public static void main(String arg[])
{
String fname = "student2.obj";
Student2 s1 = new Student2(1,"Wang");
s1.save(fname);
s1.display(fname);
}
}
程式運行結果如下:
Student2 interface java.io.Serializable
1 Wang