序列化技術(shù) parcelable與serializable

序列化概念

對(duì)象的序列化 : 把Java對(duì)象轉(zhuǎn)換為字節(jié)序列并存儲(chǔ)至一個(gè)儲(chǔ)存媒介的過程。
對(duì)象的反序列化:把字節(jié)序列恢復(fù)為Java對(duì)象的過程。

為什么要將對(duì)象序列化?

1、永久性保存對(duì)象,保存對(duì)象的字節(jié)序列到本地文件中;
2、用過序列化對(duì)象在網(wǎng)絡(luò)中傳遞對(duì)象;
3、通過序列化對(duì)象在進(jìn)程間傳遞對(duì)象。

serializable

對(duì)于Serializable,類只需要實(shí)現(xiàn)Serializable接口,并提供一個(gè)序列化版本id(serialVersionUID)即可。

private static final long serialVersionUID=0L;

** 案例1: **
1)MySerializable.java

public class MySerializable implements Serializable {...}

2)MainActivity.java

 MySerializable mySerializable = new MySerializable ();
 Intent intent = new Intent(this,Second.class);  
 intent.putExtra("mySerializable",mySerializable );

3)Second.java

 Intent intent = getIntent();
 MySerializable mySerializable = intent.getSerializableExtra("mySerializable");

parcelable

  1. 實(shí)現(xiàn)Parcelable接口
  2. 添加實(shí)體屬性
  3. 覆寫writeToParcel(Parcel dest, int flags)方法,指定寫入Parcel類的數(shù)據(jù)。
  4. 創(chuàng)建Parcelable.Creator靜態(tài)對(duì)象,有兩個(gè)方法createFromParcel(Parcel in)與newArray(int size),前者指定如何從Parcel中讀取出數(shù)據(jù)對(duì)象,后者創(chuàng)建一個(gè)數(shù)組。
  5. 覆寫describeContents方法,默認(rèn)返回0。

Parcelable 示例代碼:

public class MyParcelable implements Parcelable {
     private int mData;
     public int describeContents() {
         return 0;
     }
     public void writeToParcel(Parcel out, int flags) {
         out.writeInt(mData);
     }
     public static final Parcelable.Creator<MyParcelable> CREATOR
             = new Parcelable.Creator<MyParcelable>() {
         public MyParcelable createFromParcel(Parcel in) {
             return new MyParcelable(in);
         }
         public MyParcelable[] newArray(int size) {
             return new MyParcelable[size];
         }
     };
         private MyParcelable(Parcel in) {
         mData = in.readInt();
     }
 }

存入數(shù)據(jù):

Bundle bundle = new Bundle();  
bundle.putParcelable("myParcelable", myParcelable );  
Intent intent = new Intent(MainActivity.this, SecondActivity.class);  
intent.putExtras(bundle); 

取出數(shù)據(jù):

Intent intent = getIntent();  
Bundle bun = intent.getExtras();  
MyParcelable myParcelable = bun.getParcelable("myParcelable");  
System.out.println(myParcelable );  

serializable與parcelable的選擇

1、在使用內(nèi)存的時(shí)候,Parcelable比Serializable性能高,所以推薦使用Parcelable類。
2、Serializable在序列化的時(shí)候會(huì)產(chǎn)生大量的臨時(shí)變量,從而引起頻繁的GC。
3、Parcelable不能使用在將數(shù)據(jù)存儲(chǔ)在磁盤上的情況,因?yàn)镻arcelable不能很好的保存數(shù)據(jù)的持續(xù)性在外界有變化的情況下。因此在這種情況下,建議使用Serializable。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android跨進(jìn)程通信IPC整體內(nèi)容如下 1、Android跨進(jìn)程通信IPC之1——Linux基礎(chǔ)2、Andro...
    隔壁老李頭閱讀 12,318評(píng)論 6 38
  • JAVA序列化機(jī)制的深入研究 對(duì)象序列化的最主要的用處就是在傳遞,和保存對(duì)象(object)的時(shí)候,保證對(duì)象的完整...
    時(shí)待吾閱讀 11,203評(píng)論 0 24
  • 由于進(jìn)行通信肯定要涉及數(shù)據(jù)的處理,所以我們需要先了解兩個(gè)基礎(chǔ)的概念,序列化和反序列化。 定義 序列化:將對(duì)象轉(zhuǎn)化為...
    Eric_feng閱讀 1,248評(píng)論 0 1
  • What? 何為序列化與反序列化?序列化:將對(duì)象轉(zhuǎn)化為二進(jìn)制序列的過程反序列化:將二進(jìn)制序列恢復(fù)為原始對(duì)象的過程 ...
    LilacZiyun閱讀 3,138評(píng)論 0 15
  • 對(duì)于像Linckia海星客這樣有開放工位以及獨(dú)立辦公間的聯(lián)合辦公空間里的哪些創(chuàng)業(yè)者們來說,要像讓自己的事業(yè)穩(wěn)定持續(xù)...
    skyjun閱讀 213評(píng)論 0 0

友情鏈接更多精彩內(nèi)容