创建方式
- Serializable:java自带的序列化api,即实现该接口即可
public class Person implements Serializable {
private static final long serialVersionUID = -4298488259928482555L;
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
IDEA提供代码检查,会提示实现了Serializable的类未添加serialVersionUID字段,打开该检查方式如下
- Parcelable:android提供的序列化方式,即实现该接口覆写接口提供的方法,并创建Creator
public class Student implements Parcelable {
private String name;
private int score;
public Student() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public static final Creator<Student> CREATOR = new Creator<Student>() {
@Override public Student createFromParcel(Parcel in) {
return new Student(in);
}
@Override public Student[] newArray(int size) {
return new Student[size];
}
};
@Override public int describeContents() {
return 0;
}
@Override public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(score);
}
private Student(Parcel in) {
name = in.readString();
score = in.readInt();
}
}
两者的简单比较
- Serializable是JavaSE提供的api;Parcelable是android为了提升序列化性能单独提供的api
- Serializable是通过IO读写序列化至磁盘,序列化过程中用到了反射,且会产生大量临时对象,会导致系统频繁GC,所以效率较低;Parcelable直接在内存中完成序列化过程,效率较高
- 需要持久保存的数据建议使用Serializable,因为可以将数据序列化至磁盘上;android中通过Intent传递的序列化数据建议使用Parcelable,毕竟专门提供的方式嘛,实现方式麻烦点,但是效率高不少