java 對象序列化

對象的序列化:把一個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();
  }
  
 }
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章