Android 使用Parcelable序列化对象

来源:互联网 发布:手绘动画mac 编辑:程序博客网 时间:2024/05/22 13:09
    Android序列化对象主要有两种方法,实现Serializable接口、或者实现Parcelable接口。实现Serializable接口是Java SE本身就支持的,而Parcelable是Android特有的功能,效率比实现Serializable接口高,而且还可以用在IPC中。实现Serializable接口非常简单,声明一下就可以了,而实现Parcelable接口稍微复杂一些,但效率更高,推荐用这种方法提高性能。下面就介绍一下实现Parcelable接口的方法 
        通过实现Parcelable接口序列化对象的步骤: 
        1、声明实现接口Parcelable 
        2、实现Parcelable的方法writeToParcel,将你的对象序列化为一个Parcel对象 
        3、实例化静态内部对象CREATOR实现接口Parcelable.Creator:
Java代码  收藏代码
  1. public static final Parcelable.Creator<T> CREATOR  

       其中public static final一个都不能少,内部对象CREATOR的名称也不能改变,必须全部大写。 
        4、完成CREATOR的代码,实现方法createFromParcel,将Parcel对象反序列化为你的对象 

        简而言之:通过writeToParcel将你的对象映射成Parcel对象,再通过createFromParcel将Parcel对象映射成你的对象。也可以将Parcel看成是一个流,通过writeToParcel把对象写到流里面,在通过createFromParcel从流里读取对象,只不过这个过程需要你来实现,因此写的顺序和读的顺序必须一致。 
        
        Parcel对象可以通过以下方法写入或读取byte, double, float, int, long, String这6种类型变量。
 
Java代码  收藏代码
  1. writeByte(byte), readByte()  
  2. writeDouble(double), readDouble()  
  3. writeFloat(float), readFloat()  
  4. writeInt(int), readInt()  
  5. writeLong(long), readLong()  
  6. writeString(String), readString()  


        也可以读取或写入他们的数组 
Java代码  收藏代码
  1. writeBooleanArray(boolean[]), readBooleanArray(boolean[]), createBooleanArray()  
  2. writeByteArray(byte[]), writeByteArray(byte[], intint), readByteArray(byte[]), createByteArray()  
  3. writeCharArray(char[]), readCharArray(char[]), createCharArray()  
  4. writeDoubleArray(double[]), readDoubleArray(double[]), createDoubleArray()  
  5. writeFloatArray(float[]), readFloatArray(float[]), createFloatArray()  
  6. writeIntArray(int[]), readIntArray(int[]), createIntArray()  
  7. writeLongArray(long[]), readLongArray(long[]), createLongArray()  
  8. writeStringArray(String[]), readStringArray(String[]), createStringArray()  
  9. writeSparseBooleanArray(SparseBooleanArray), readSparseBooleanArray()  


        更多操作可以参阅: 
http://developer.android.com/reference/android/os/Parcel.html 
示例代码:
 
Java代码  收藏代码
  1. package com.ipjmc.demo.parcelable;  
  2.   
  3.   
  4. import java.util.Date;  
  5.   
  6. import android.os.Parcel;  
  7. import android.os.Parcelable;  
  8.   
  9. public class ParcelableDate implements Parcelable { //声明实现接口Parcelable  
  10.   
  11.     //这里定义了两个变量来说明读和写的顺序要一致  
  12.     public long mId;  
  13.     public Date mDate;  
  14.       
  15.     public ParcelableDate(long id, long time) {  
  16.         mId = id;  
  17.         mDate = new Date(time);  
  18.     }  
  19.       
  20.     public ParcelableDate(Parcel source) {  
  21.         //先读取mId,再读取mDate  
  22.         mId = source.readLong();  
  23.         mDate = new Date(source.readLong());  
  24.     }  
  25.       
  26.     @Override  
  27.     public int describeContents() {  
  28.         return 0;  
  29.     }  
  30.   
  31.     //实现Parcelable的方法writeToParcel,将ParcelableDate序列化为一个Parcel对象  
  32.     @Override  
  33.     public void writeToParcel(Parcel dest, int flags) {   
  34.         //先写入mId,再写入mDate  
  35.         dest.writeLong(mId);  
  36.         dest.writeLong(mDate.getTime());  
  37.     }  
  38.   
  39.     //实例化静态内部对象CREATOR实现接口Parcelable.Creator  
  40.     public static final Parcelable.Creator<ParcelableDate> CREATOR = new Creator<ParcelableDate>() {  
  41.           
  42.         @Override  
  43.         public ParcelableDate[] newArray(int size) {  
  44.             return new ParcelableDate[size];  
  45.         }  
  46.           
  47.         //将Parcel对象反序列化为ParcelableDate  
  48.         @Override  
  49.         public ParcelableDate createFromParcel(Parcel source) {  
  50.             return new ParcelableDate(source);  
  51.         }  
  52.     };  
  53. }  
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 捡个华为手机非要激活才能用怎么办 华为手机没激活想重新激活怎么办 华为手机激活总显示系统繁忙怎么办 华为荣耀7i进水了不开机怎么办 华为荣耀手机进水了怎么办开不开机 华为畅享5s变砖怎么办 我的苹果7机身内存满了怎么办 小米5x拆机后屏幕翘边怎么办 苹果手机设备禁止游戏登入怎么办 苹果7plus玩游戏掉频怎么办 孕期牙套子掉了基牙烂掉了怎么办 美团绑定的信用卡过期了怎么办 苹果6s手机开不开机怎么办 换了散热硅胶后还是死机怎么办 华为畅享6s掉啦怎么办 透明塑料壳被太阳晒的发黄怎么办 新买的手机壳有味道怎么办 刚买的手机壳有异味怎么办 bjd 光油把妆蹭掉了一点怎么办 软皮套手机壳如果大了怎么办 苹果手机自带相机拍照会晃屏怎么办 苹果x手机壳拆不下来怎么办 苹果手机5c屏幕没有反应怎么办 玩穿越火线屏幕两边是黑的怎么办? 8g内存只有2g可用怎么办? 三星7e微信分身打不开怎么办? 光猫的网口1不亮怎么办 两年前的发票发现名头有错误怎么办 苹果5s手机通话声音小怎么办 华为全网通手机电信卡打不了怎么办 合约机移动违约不返话费我该怎么办 电信手机卡合约套餐要到期了怎么办 苹果6s联通4g网速慢怎么办 营业厅买到的不是全网通手机怎么办 全网通手机联通卡被禁用怎么办 红米5手机关机充电自动开机怎么办 华为平板怎么解锁密码忘了怎么办 华为荣耀手机开锁密码忘记了怎么办 畅玩7x密码忘了怎么办 过了时的手机没有刷机包怎么办? 刷了个刷机包游戏玩不了了怎么办?