序列化是需要使数据对象在不同的activity之间传递。android使用Intent的putExtra()来传递数据,但是只支持有限的数据类型。所以需要使用序列化。
Serializable是java默认的序列化方式。
只需要默认实现Serializable接口就可以了。
使用Intent.putExtra(key,value)方式传递。读取时,通过getIntent().getSerializableExtra(key)读取。
Parcelable 是安卓的序列化方式。
不同在于Parcelable 是把对象按字段实现序列化,需要实现Parcelable 接口,并完成接口方法的实现,比Serializable方式要复杂。
通过实现Parcelable 接口,需要完成如下几个接口方法的实现:
@Override
public void writeToParcel(Parcel dest, int flags) {
//读取顺序和写入顺序一致
dest.writeString(name);
dest.writeString(sex);
dest.writeInt(age);
}
@Override
public int describeContents() {
return 0;
}
并完成接口类Creator的实现:
需要将泛型指定为需要实现序列化的类名
public static final Creator<Person> CREATOR = new Creator<Person>() {
@Override
public Person createFromParcel(Parcel in) {
Person person=new Person();
//读取顺序和写入顺序一致
person.name=in.readString();
person.sex=in.readString();
person.age=in.readInt();
return person;
}
@Override
public Person[] newArray(int size) {
return new Person[size];
}
}
int describeContents()和public Person[] newArray(int size)使用默认就可。
需要注意的是,在写入序列化和读取的时候,字段要按照顺序进行写和读。
传递时,同样使用intent.putExtra(key,value)。
读取时,通过getIntent().getParcelableExtra(key)读取。
对比二者,java Serializable效率低一些,但有持久化需要时,支持好。
如果仅是在Activity之间传递数据,建议使用Parcelable。
网友评论