public class User implements Parcelable{
public int userId;
public String userName;
public boolean isMale;
public Book book;
public User(int userId,String userName,boolean isMale){
this.userId = userId;
this.userName=userName;
this.isMale =isMale;
}
//内容描述过程
public int describeContents(){
return 0;
}
//序列化过程 一系列write方法 其中flags标识有两种值:0或者1,为1时标识当前对象需要作为返回值返回,不能立即释放资源,几乎所有情况都为0
public void writeToParcel(Parcel out,int flags){
out.writeInt(userId);
out.writeString(userName);
out.writeInt(isMale?1:0);
out.writeParcelable(book,0);
}
//反序列化过程
public static final Parcelable.Creator<User> CREATOR=new Parcelable.Creator<User>(){
//从序列化后的对象中创建原始对象
public User createFromParcel(Parcel in){
return new User(in);
}
//创建指定长度的原始对象数组
public User[] newArray(int size){
return new User[size];
}
};
//由于book是另一个可序列化对象,所以它的反序列化过程需要传递当前线程的上下文类加载器,否则会报无法找到类的错误
private User(Parcel in){
userId =in.readInt();
userName=in.readString();
isMale=in.readInt()==1;
book=in.readParcelable(Thread.currentThread().getContentClassLoader());
}
}
Serializable与Parcelable之间的区别:
Serializable是Java中的序列化接口,其使用起来简单但是开销很大,序列化和反序列化过程需要大量I/O操作。而Parcelable是Android中的序列化方式,因此更适合用在Android平台上,它的缺点就是使用起来稍微麻烦点,但是它的效率很高,这是Android推荐的序列化方式,因此我们要首选Parcelable。Parcelable主要用在内存序列化上,通过Parcelable将对象序列化到存储设备中或者将对象序列化后通过网络传输也都是可以的,但是这个过程会稍显复杂,因此在这两种情况下建议大家使用Serializable。