Android序列化和反序列化
2018-09-21 本文已影响136人
erki_stwee
kawayi.png
Parcelable和Serializable有什么用,它们有什么差别?
Parcelable和Serializable都可以用于序列化。只要实现了其中一个都可以用于Intent和Binder中传输数据。
差异:
- 来源不同:Parcelable来自于Android,Serializable来自于Java。
- 使用上:Parcelable更加复杂;Serializable更加简便(serialVersionUID主要用于反序列化transient关键字标识的字段不参与序列化,如果没有serialVersionUID反序列化可能出错)
- 效率上:Parcelable相较于Serializable更加高效。
自定义一个类让其实现Parcelable,大致流程是什么?
writeToParcel(Parcel dest, int flags) 序列化 --->TestParcelable(Parcel in)反序列化
public class TestParcelable implements Parcelable {
public String name;
private int age;
private TestSerializable testSerializable;
public TestParcelable(String name, int age, TestSerializable testSerializable) {
this.name = name;
this.age = age;
this.testSerializable = testSerializable;
}
protected TestParcelable(Parcel in) {
name = in.readString();
age = in.readInt();
testSerializable = (TestSerializable) in.readSerializable();
}
public static final Creator<TestParcelable> CREATOR = new Creator<TestParcelable>() {
@Override
public TestParcelable createFromParcel(Parcel in) {
return new TestParcelable(in);
}
@Override
public TestParcelable[] newArray(int size) {
return new TestParcelable[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(age);
dest.writeSerializable(testSerializable);
}
}