为什么要序列化

  • 1.实现Parcelable就是为了进行序列化,那么,为什么要序列化?
    1)永久性保存对象,保存对象的字节序列到本地文件中;
    2)通过序列化对象在网络中传递对象;
    3)通过序列化在进程间传递对象。
  • 2.实现序列化的方法
    Android中实现序列化有两个选择:一是实现Serializable接口(是JavaSE本身就支持的),一是实现Parcelable接口(是Android特有功能,效率比实现Serializable接口高效,可用于Intent数据传递,也可以用于进程间通信(IPC))。实现Serializable接口非常简单,声明一下就可以了。
    实现Parcelable接口稍微复杂一些,但效率更高。(推荐这种)
  • 3.Parcelable接口定义
    public interface Parcelable { 
    //内容描述接口,基本不用管 
    public int describeContents(); 
    //写入接口函数,打包 
    public void writeToParcel(Parcel dest, int flags); 
    //读取接口,目的是要从Parcel中构造一个实现了Parcelable的类的实例处理。
    //因为实现类在这里还是不可知的,所以需要用到模板的方式,继承类名通过模板参数传入。
    //为了能够实现模板参数的传入,这里定义Creator嵌入接口,内含两个接口函数分别返回单个和多个继承类实例 。
    public interface Creator<T> { 
    public T createFromParcel(Parcel source); 
    public T[] newArray(int size); }
    }
    
  • 4.实现Parcelable步骤
    1)implements Parcelable
    2)重写writeToParcel方法,将你的对象序列化为一个Parcel对象,即:将类的数据写入外部提供的Parcel中,打包需要传递的数据到Parcel容器保存,以便从 Parcel容器获取数据
    3)重写describeContents方法,内容接口描述,默认返回0就可以
    4)实例化静态内部对象CREATOR实现接口Parcelable.Creator

总结:

通过writeToParcel将你的对象映射成Parcel对象,再通过createFromParcel将Parcel对象映射成你的对象。也可以将Parcel看成是一个流,通过writeToParcel把对象写到流里面,在通过createFromParcel从流里读取对象,只不过这个过程需要你来实现,因此写的顺序和读的顺序必须一致。

示例代码如下

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(); } 
}

End

你可能感兴趣的内容
Android中远程Service浅析 收藏,4227 浏览
Java序列化与static 收藏,3232 浏览
0条评论
TH

Thang-Pham

这家伙太懒了,什么都没留下
Owner