为了把实例变量保存起来,就需要用到序列化。
序列化的原因在网上找了下,有三种
1.永久的保存对象,保存对象的字节序列到本地。
2.通过序列化对象,在网络中传递数据。
3.序列化后在进程间传递对象。
android的序列化有Serializable,Parcelable两种。其中Serializable是javaEE的,Parcelable是android本身的。
Parcelable比Serializable更有效率,在内存中完成,并且Serializable会创建很多临时变量,容易造成GC。但是用到数据要存储在磁盘本地必须用Serializable。
Parcelable比Serializable用起来稍稍麻烦一点。
Serializable,只需要让类继承Serializable接口,生成一串serialVersionUID,系统便自动序列化。
Parcelable,需要自己序列化和反序列化。并且序列化,反序列化的顺序必须相同。
下面是实例。
public class DataInfo implements Serializable {
/**
*
*/
private static final long serialVersionUID = 678504673025807882L;
private String name;
private String age;
private boolean isMale;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public boolean isMale() {
return isMale;
}
public void setMale(boolean isMale) {
this.isMale = isMale;
}
@Override
public String toString() {
return (isMale ? "he name is " : "her name is ") + name + ", and "
+ age + " years old.";
}
}
public class DataInfo implements Parcelable {
private String name;
private String age;
private boolean isMale;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public boolean isMale() {
return isMale;
}
public void setMale(boolean isMale) {
this.isMale = isMale;
}
@Override
public String toString() {
return (isMale ? "he name is " : "her name is ") + name + ", and "
+ age + " years old.";
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeString(age);
dest.writeByte((byte) (isMale ? 1 : 0));
}
public static final Parcelable.Creator<DataInfo> CREATOR = new Parcelable.Creator<DataInfo>() {
@Override
public DataInfo createFromParcel(Parcel source) {
DataInfo info = new DataInfo();
info.setName(source.readString());
info.setAge(source.readString());
info.setMale(source.readByte() != 0);
return info;
}
@Override
public DataInfo[] newArray(int size) {
return new DataInfo[size];
}
};
}