一:Serializable接口
Serializable是Java提供的一个序列化的接口,它是一个空接口。为对象提供一个序列化和反序列化的操作。使用简单,只需要在类的申明中指定一个标记即可:
Private static final long serialVersionUID = xxxxxxxxxxxxxxxxxxxx(注意:UID的可以根据当前类的结构自动去生成它的hash值!)
其实,这个UID也不是必须的一定的,我们不申明的情况下, 也是可以实现序列化的。但是它针对反序列化的时候会产生影响。
UID的工作机制:
序列化的时候,系统会将当前类的UID写入到序列化的文件中,反序列化的时候系统就会检测UID,判断是否和当前类的UID一致,一致,则说明是相同的版本, 可成功的序列化,反之则会无法正常的反序列化。
报错信息:java.io.InvalidClassException
Serializable的使用:
只需要采用ObjectOutputStream和ObjectInputStream就可以实现:
//实现序列化
Bean bean = new Bean(0,“lucy”,true);
ObjectOutputStream oot = new ObjectOutputStream(new FileOutputStream(“abc.text”));
oot.writeObject(bena);
oot.close();
//实现反序列化
ObjectInputStream in = new ObjectInputStream(new FileInputStream("abc.text"));
Bean bean = (Bean) in.readObject();
in.close();
二:Parcelable接口
Parcelable是Andrid 的一个接口,只要实现这个接口,一个类的对象就可以实现序列化并可以通过Intent和Binder进行传递。
Parcelable的方法说明:
createFromParcel(Parcel in):从序列化的对象中创建原始的对象
new Array(int size):创建指定长度的原始对象的数组
User(Parcel in):从序列化后的对象创建原始对象
writeToParcel(Parcel out,int flags):对象写入序列化,flags有两种值,0或者1,为1时标记当前的对象需要作为返回值返回,不立即释放资源,几乎都
为0
describeContents:返回当前对象的内容的描述,有文件描述则返回1,反之,返回0;几乎所有的情况都返回0;
如何选择用Parcelable和Serializable?
Serializable是java的序列化的接口,使用简单,但是在序列化和反序列化的时候过程中需要大量的IO操作。
而Parcelable是Android中的序列化的方式,因此更适合在Android上使用。
缺点:是使用相对比较麻烦。优点:效率很高。Android推荐,Parcelable主要用在内存的序列化上,通过它将对象序列化到存储设备中或者将对象序列化后在通过网络传输也是可以的,只是过程比较复杂,所以在这种情况下,建议使用Serializable。
首次使用,不足请指点,谢谢!