Serializable 和Parcelable 比较

在android开发过程中,遇到Activity之间传递数据,普通数据类型int float double short long char boolean byte 和String类型的参数,Intent 分别有对应的方法存入取出。对象类型的参数,传递有两种方式

实现Serializable接口,或者实现Parcelable接口。

Serializable 使用起来比较简单,没有需要实现的方法。Parcelable是android提供的接口,通过writeToParcel 将需要保存的字段保存在一个Parcel中,通过CREATOR,从Parcel中恢复对象实体。

在两方面优劣的比较上,有说Serializable涉及IO操作(不太理解),Parcelable 是内存操作。Serializable实现序列话需要ObjectOutputStream ,反序列化需要ObjectInputStream。

对应对象类型的列表。有ParcelableArray的方法,对于Serializable ,需要用一个包装类,通过GoodPackage 进行传播。

class GoodPackage implements Serializable{

List list=new Arraylist();

}

class Good implements Serializable{

String name;

}

如果是IBinder类型,在Parcelable进行序列化,再反序列化得到的是原对象,而不是新对象。

//Binder implements IBinder接口

class Good extends Binder{

}

class MyGood implements Parcelable {

private Good good=new Good();

public MyGood(){

       good.color= Color.BLACK;

}

protected MyGood(Parcel in) {

       good= (Good) in.readValue(Good.class.getClassLoader());

}

public static final Creator CREATOR=new Creator() {

@Override

public MyGood createFromParcel(Parcel in) {

     return new MyGood(in);

}

@Override

public MyGood[] newArray(intsize) {

      return new MyGood[size];

}

};

@Override

public intdescribeContents() {

      return0;

}

@Override

public voidwriteToParcel(Parcel parcel, inti) {

     parcel.writeValue(good);

      }

这时对于反序列化后的数据进行修改,该的是原数据的值。

你可能感兴趣的:(Serializable 和Parcelable 比较)