序列化:将一个对象转换成可存储或可传输的状态,序列化后的对象可以在网络上传输,也
可以存储到本地,或实现跨进程传输;
为什么要进行序列化:开发过程中,我们需要将对象的引用传给其他 activity 或 fragment
使用时,需要将这些对象放到一个 Intent 或 Bundle 中,再进行传递,而 Intent 或 Bundle
只能识别基本数据类型和被序列化的类型
Serializable:表示将一个对象转换成可存储或可传输的状态。
Parcelable:与 Serializable 实现的效果相同,也是将一个对象转换成可传输的状态,但它
的实现原理是将一个完整的对象进行分解,分解后的每一部分都是 Intent 所支持的数据类
型,这样实现传递对象的功能。
Parcelable 实现序列化的重要方法:序列化功能是由 writeToParcel 完成,通过 Parcel 中
的 write 方法来完成;反序列化由 CREATOR 完成,内部标明了如何创建序列化对象及数级,
通过 Parcel 的 read 方法完成;内容描述功能由 describeContents 方法完成,一般直接返
回 0。
区别:Serializable 在序列化时会产生大量临时变量,引起频繁 GC。Serializable 本质上使
用了反射,序列化过程慢。Parcelable 不能将数据存储在磁盘上,在外界变化时,它不能
很好的保证数据的持续性。
选择原则:若仅在内存中使用,如 activity/service 间传递对象,优先使用 Parcelable,它
性能高。若是持久化操作,优先使用 Serializable
注意:静态成员变量属于类,不属于对象,固不会参与序列化的过程;用 transient 关键字
编辑的成员变量不会参与序列化过程;可以通过重写 writeObject()和 readObject()方法来
重写系统默认的序列化和反序列化
原创文章,作者:kirin,如若转载,请注明出处:https://blog.ytso.com/278191.html