一.serializable
用改方式实现序列化很简单,直接实现该接口就行了,其他的工作都被系统完成了。
public class Student implements Serializable {
private static final long servialVersionUID=5432164564132123L;
private int userId;
private String userName;
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
注意“”servialVersionUID 原则上序列化后的数据中的serialVersionUID只有和当前类的serialVersionUID相同才能够正常的被反序列化。如果不一致,说明当前类和序列化的类相比发生一些变化(变量,变量类型等等),则会报错。
parcelable 方法
采用该方法需要实现该接口并且手动实现序列化过程,相对复杂点。具体方式如下
public class User implements Parcelable {
String name;
int age;
protected User(Parcel in) {
name = in.readString();
age = in.readInt();
}
//该方法用来反序列化
public static final Creator<User> CREATOR = new Creator<User>() {
@Override
public User createFromParcel(Parcel in) {
return new User(in);
}
@Override
public User[] newArray(int size) {
return new User[size];
}
};
/**
* 内容描述 几乎都是0,只有当前对象存在文件描述符的时候返回1。
*/
@Override
public int describeContents() {
return 0;
}
/**
* 将对象写入序列化的结构中
* @param dest 用来操作序列化的 Parcel类
* @param flags 有两种值,为1是表嗾使当前对象需要作为返回值返回,不能立即释放资源,几乎都是0
*/
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(age);
}
}
两者区别
serializable 是java的序列化接口。特点是简单,但是对于内存开销大,序列化和反序列化需要很多的I/O流操作。
parcelable 是安卓的序列化方式,听名字就知道更适合,主要用于在内存序列化上,
如果序列化到存储设备(文件等)或者网络传输,比较复杂,建议用serrialzable方式。