1、序列化是干什么的?
簡單說就是為了保存在內存中的各種對象的狀態(也就是實例變量,不是方法),並且可以把保存的對象狀態再讀出來。雖然你可以用你自己的各種各樣的方法來保存object states,但是Java給你提供一種應該比你自己好的保存對象狀態的機制,那就是序列化。
2、什么情況下需要序列化
a)當你想把的內存中的對象狀態保存到一個文件中或者數據庫中時候;
b)當你想用套接字在網絡上傳送對象的時候;
c)當你想通過RMI傳輸對象的時候;
3、Parcelable和Serializable的區別:
內存間數據傳輸時推薦使用Parcelable,如activity間傳輸數據
保存到本地或者網絡傳輸時推薦使用Serializable
serialVersionUID 用來表明類的不同版本間的兼容性。
有兩種生成方式: 一個是默認的1L;另一種是根據類名、接口名、成員方法及屬性等來生成一個64位的哈希字段 。
java類中為什么需要重載 serialVersionUID 屬性。
當兩個進程在進行遠程通信時,彼此可以發送各種類型的數據。無論是何種類型的數據,都會以二進制序列的形式在網絡上傳送。發送方需要把這個Java對象轉換為字節序列,才能在網絡上傳送;接收方則需要把字節序列再恢復為Java對象。 把Java對象轉換為字節序列的過程稱為對象的序列化,把字節序列恢復為Java對象的過程稱為對象的反序列化。
========================================
SerializableDemo:MainActivity.java通過Serializable接口保存數據並跳轉到FirstActivity.java,在FirstActivity.java中讀取數據。
Person類
package com.example.serializetest; import java.io.Serializable; public class Person implements Serializable{ private static final long serialVersionUID = 1L; // 成員變量 private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
MainActivity.java
// 封裝數據 Person p = new Person(); p.setId(320840); p.setName("小伙子"); Intent i = new Intent(MainActivity.this, FirstActivity.class); i.putExtra("Person", p); startActivity(i);
FirstActivity.java
Person p = (Person)getIntent().getSerializableExtra("Person"); System.out.println("身份證"+p.getId()); System.out.println("姓名"+p.getName());
下載地址:http://download.csdn.net/detail/xubuhang/8695671
其他例子:http://www.tuicool.com/articles/2ymUVn
傳遞List<Object>傳遞List<Object>的方法:http://blog.csdn.net/wirelessqa/article/details/8589200