序列化
序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
序列化的作用:
a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;
b)当你想用套接字在网络上传送对象的时候;
c)当你想通过RMI传输对象的时候
Serializable
- Java系统自动帮我们进行序列化及反序列化。
- 只要将需要序列化的类实现Serializable的接口,及定义一个serialVersionUID。
- serialVersionUID 用来表明类的不同版本间的兼容性。
- 主要用于磁盘中的序列化及网络传输的序列化
public class SerializableEntity implements Serializable {
private static final long serialVersionUID = 4346436081116036728L;
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;
}
}
Parcelable
- 是android独有的序列化
- 写入数据的顺序和读出数据的顺序必须是相同的
- 主要用于内存序列化
public class ParcelableEntity implements Parcelable {
private String name;
private int age;
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.name);
dest.writeInt(this.age);
}
public ParcelableEntity() {
}
protected ParcelableEntity(Parcel in) {
this.name = in.readString();
this.age = in.readInt();
}
public static final Creator<ParcelableEntity> CREATOR = new Creator<ParcelableEntity>() {
@Override
public ParcelableEntity createFromParcel(Parcel source) {
return new ParcelableEntity(source);
}
@Override
public ParcelableEntity[] newArray(int size) {
return new ParcelableEntity[size];
}
};
}
注意:
-
Parcelable的性能要强于Serializable.因此在绝大多数的情况下,Android还是推荐使用Parcelable来完成对类的序列化操作的,数据持久化的时候需要使用到Serializable,其他情况使用Parcelable。
-
内存间数据传输时推荐使用Parcelable,如activity间传输数据
-
保存到本地或者网络传输时推荐使用Serializable