序列化:就是將對象的狀態信息轉換爲能夠存儲或傳輸的形式的過程javascript
在咱們平時開發中.咱們用到序列化最多的地方就是經過intent傳遞對象,若是你要在intent中傳遞基本數據類型之外的對象,那麼該對象必須實現Serializable或者Parcelable,不然會報錯java
注意:android
Serializable是java提供的序列化接口,使用起來特別簡單,你只用實現這個接口就可以讓這個對象支持序列化面試
public class Person implements Serializable{
}複製代碼
可是有一點要注意,就是你能夠添加一個字段,serialVersionUID緩存
private static final long serialVersionUID = 2387925265962719695L;複製代碼
若是你不添加serialVersionUID,也不會影響使用,可是存在即合理,既然存在這個字段,那麼他必定是有用的,當你序列化的時候這個UID會被寫入文件,當反序列話的時候會去讀取這個ID,並與反序列化的類中的UID對比,若是相同,那麼反序列化就成功,若是不一樣,反序列化就會失敗網絡
當你不指定UID的時候,系統會根據類的結構生成相應的hash值賦值給UID,可是當你的類的結構發生變化,好比增長一個字段或者減小一個字段的時候,UID就會發生變化,那麼反序列話的時候兩個類的UID就不同了,就會反序列化失敗ide
因此手動指定UID,主要就是在類結構發生變化時,減小反序列化失敗的概率(若是類發生了很是規的結構變化,好比類名變化,成員變量的類型變化,就算是指定了UID,反序列化也會失敗)工具
Serializable序列化與反序列化有不少種方法,這裏示範一下經過寫入文件和讀取文件來實現.優化
序列化: spa
File file = new File(getFilesDir()+"xiayu.txt");
Person person = new Person("xiayu");
ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(file));
outputStream.writeObject(person);複製代碼
反序列化:
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(getFilesDir()+"xiayu.txt"));
Person person = (Person) objectInputStream.readObject();複製代碼
Parcelable是Android特有的序列化方式,他的實現相對Serialiable來講更加複雜一點,可是經過AS的一個插件就能夠很方便的完成
當你完成對象的建立並實現Parcelable接口後,右鍵,選擇Generate,接着選擇Parcelable,並點擊你須要序列化的字段,點擊ok就完成可序列化了
這裏面的方法就不作詳細解析了,有興趣的朋友能夠去了解一下
Serializable:
Parcelable: