什么時候用的到序列化?
1、永久性保存對象,保存對象的字節序列到本地文件中
2、通過序列化對象在網絡中傳遞對象
3、通過序列化在進程之間傳遞對象
在安卓中,可以用作在Activity中傳遞復雜類型,主要是將自己的類轉換為基礎的字節數組,Android中Activity傳遞主要靠Intent這個類,Intent類內部傳遞數據的效率仍然需要拷貝,如果數據太大,其實可以考慮用單例模式,定義一個全局的靜態類,活用設計模式。
Parcelable
putExtra(String name, Parcelable value)//傳遞一個parcelable對象
putExtra(String name, Parcelable[] value) // 傳遞一個Parcelable數組
putExtra(String name, Bundle value) //傳遞一個Bundle對象
putParcelableArrayListExtra(String name, ArrayList<? extends Parcelable> value) //傳遞一個實現Parcelable接口的對象數組
putStringArrayListExtra(String name, ArrayList<String> value) //傳遞一個字符串數組
putIntegerArrayListExtra(String name, ArrayList<Integer> value) //傳遞一個整形數組。
Integer這些裝箱類型,Intent還實現了 putExtra(String name, int[] value) 這樣的基礎類型數組,同時Parcelable效率比標准的Java序列化更高,同時還被用作在AIDL中交換數據,所以掌握Parcelable這樣的顯示序列化技術,可以大幅提高數據交換性能。
Serializable
傳統的Java,串行化技術,實現Serializable接口,原理和Parceble差不多,均將自己的類轉換為基本的類型比如說字節數組,在Android中不是很實用,比Parcelable效率低,在Intent中使用Intent putExtra(String name, Serializable value) 這個方法即可。
區別
- 在使用內存的時候,Parcelable比Serializable性能高,所以推薦使用Parcelable。
- Serializable在序列化的時候會產生大量的臨時變量,從而引起頻繁的GC。
- Parcelable不能使用在要將數據存儲在磁盤上的情況,因為Parcelable不能很好的保證數據的持續性在外界有變化的情況下。盡管Serializable效率低點, 也不提倡用,但在這種情況下,還是建議你用Serializable 。
部分來自於http://www.cnblogs.com/blueofsky/archive/2012/01/07/2315664.html、http://www.cnblogs.com/ylligang/articles/2231559.html