序列化:把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);
}