序列化对象Serializable和Parcelable
创建方式
-
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,毕竟专门提供的方式嘛,实现方式麻烦点,但是效率高不少