Java序列化的總結

序列化:把Java對象轉換爲字節序列的過程。
反序列化:把字節序列恢復爲Java對象的過程。

Serializable 和 Parcelable 的區別

Serializable:使用簡單,無需實現方法;缺點是使用了反射,序列化的過程較慢。這種機制會在序列化的時候創建許多的臨時對象,容易觸發垃圾回收。
Parcelable:序列化快;但要寫一些模板代碼。

1、什麼是Java序列化

在網絡中,對象是不能直接傳遞的,但是字節序列可以傳遞。那要在網絡中傳遞,就將對象轉爲字節序列。
序列化,表示將一個對象轉換成可存儲或可傳輸的狀態。序列化後的對象可以在網絡上進行傳輸,也可以存儲到本地。

使用Java對象序列化,在保存對象時,會把其狀態保存爲一組字節,在未來,再將這些字節組裝成對象。必須注意地是,對象序列化保存的是對象的"狀態",即它的成員變量。由此可知,對象序列化不會關注類中的靜態變量。
除了在持久化對象時會用到對象序列化之外,當使用RMI(遠程方法調用),或在網絡中傳遞對象時,都會用到對象序列化。

2、Java序列化的應用場景

將內存中的對象保存到文件或者數據庫中;用套接字在網絡上傳送對象。

如何將一個Java對象序列化到文件裏?

首先將對象序列化,創建出文件輸入輸出流,調用writeObject(),readObject()方法讀寫對象。

public static void main(String[] args) throws Exception {
        Student student = new Student();
        FileOutputStream fos=new FileOutputStream("F:"+File.separator+"TestFiles"+File.separator+"MyTest.txt");     
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(student);
        oos.close();
        
        FileInputStream fis = new FileInputStream("F:"+File.separator+"TestFiles"+File.separator+"MyTest.txt");
        ObjectInputStream ois = new ObjectInputStream(fis);
        Student student2= (Student) ois.readObject();
        System.out.println(student2);
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章