Serializable 和 Parcelable 兩種序列化


什么時候用的到序列化?

  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.htmlhttp://www.cnblogs.com/ylligang/articles/2231559.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM