ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

序列化 Serializable 和 Parcelable 的区别

2022-08-01 12:02:43  阅读:195  来源: 互联网

标签:对象 Parcelable 传输 Intent 序列化 Serializable



序列化:将一个对象转换成可存储或可传输的状态,序列化后的对象可以在网络上传输,也
可以存储到本地,或实现跨进程传输;


为什么要进行序列化:开发过程中,我们需要将对象的引用传给其他 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()方法来
重写系统默认的序列化和反序列化

标签:对象,Parcelable,传输,Intent,序列化,Serializable
来源: https://www.cnblogs.com/15078480385zyc/p/16539712.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有