對象的序列化:把一個Object對象直接轉化爲字節流,然後把它寫入到硬盤上的一個二進制文件或者通過網絡傳輸,同樣的,我們可以把這個二進制文件讀入到內存,然後用來初始化一個對象,需要序列化得類對象,需要實現Serializable接口(空接口,與instance of連用,起到標誌作用),不需要序列化得屬性可以用transient修飾。
Class:
ObjectOutputStream
ObjectInputStream
常用方法:
readObject
writeObject
其實很容易想到這樣一個問題,就是序列化得對象中有一個指針指向另一個對象時的操作,我們應當把指針指向的對象也一起序列化。另外在讀取之後重組對象時,引用的內容也應該做同步的修改.
在C++的筆記中做了一個簡單的實現程序,可以參考一下
一個基本的示例代碼
class Student implements Serializable{ public String name; transient public float score; public Student(String name,float score) { this.name = name; this.score = score; } } public class TestIO { public static void main(String[] args) { Student ss = new Student("liha", 95.5f); File file = new File("D:\\object.dat"); try { ObjectOutputStream objOut = new ObjectOutputStream(new FileOutputStream(file)); objOut.writeObject(ss); ObjectInputStream objIn = new ObjectInputStream(new FileInputStream(file)); Student sbackStudent = (Student)objIn.readObject(); System.out.println(sbackStudent.name); System.out.println(sbackStudent.score); objOut.close(); objIn.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }