Android 中Serializable与Parcelable区别?

两种都是用于支持序列化、反序列化话操作,两者最大的区别在于存储媒介的不同,Serializable使用IO读写存储在硬盘上,而Parcelable是直接在内存中读写,很明显内存的读写速度通常大于IO读写,所以在Android中通常优先选择Parcelable。
Serializable不是当前关注的焦点,不过可以查看《Java序列化算法透析》这篇文章中实现一个简单的Serializable例子,查看序列化生成的IO文件,并且以16进制读取并一一解释每一个16进制数字的含义。

 

Parcelable举例:

 

public class MyParcelable implements Parcelable {  
     private int mData;  
     private String mStr;  
  
     public int describeContents() {  
         return 0;  
     }  
  
     // 写数据进行保存  
     public void writeToParcel(Parcel out, int flags) {  
         out.writeInt(mData);  
         out.writeString(mStr);  
     }  
  
     // 用来创建自定义的Parcelable的对象  
     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();  
         mStr = in.readString();  
     }  
 }  

 

 

   

 //Pacelable传递对象方法  
    public void PacelableMethod(){  
        Book mBook = new Book();  
        mBook.setBookName("Android Tutor");  
        mBook.setAuthor("Frankie");  
        mBook.setPublishTime(2010);  
        Intent mIntent = new Intent(this,ObjectTranDemo2.class);  
        Bundle mBundle = new Bundle();  
        mBundle.putParcelable(PAR_KEY, mBook);  
        mIntent.putExtras(mBundle);  
          
        startActivity(mIntent);  
    }  

 

 

如果元素是list读出时需要先new一个ArrayList传入,否则会报空指针异常。如下:

list = new ArrayList<String>();

in.readStringList(list);

 

 

 

 

 //Serializeable传递对象的方法  
    public void SerializeMethod(){  
        Person mPerson = new Person();  
        mPerson.setName("frankie");  
        mPerson.setAge(25);  
        Intent mIntent = new Intent(this,ObjectTranDemo1.class);  
        Bundle mBundle = new Bundle();  
        mBundle.putSerializable(SER_KEY,mPerson);  
        mIntent.putExtras(mBundle);  
          
        startActivity(mIntent);  
    }  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值