Android Serializable和Parcelable原理和使用选择

1 android 中的对象序列化

序列化的目的是保存或传输数据,android中序列化目的具体包括:

  • 将对象持久化到本地(保存在文件或者数据库中)方便下次复用。
  • 序列化之后,利用数据流在网络中传输。
  • 组件间传递数据。

2 序列化手段

java中最常用的序列化标识是Serializable,定义一个Bean时实现Serializable接口,不需要实现什么方法,Serializable从源码看没有任何方法,但是注释说明很多很多。Serializable可以实现数据持久化,保存对象到本地文件、数据库、网络流传输。
Parcelable的设计初衷是因为Serializable效率过慢,为了在程序内不同组件间以及不同Android程 序间(AIDL)高效的传输数据而设计,这些数据仅在内存中存在,Parcelable是通过IBinder通信的消息的载体。

Serializable主要用于持久化存储对象,Parcelable主要用于序列化传输对象。

3 原理效率简单说明

原理:
Serializable由于使用了反射机制,在序列化操作的时候会产生大量的临时变量,从而导致GC的频繁调用。
Parcelable是以Ibinder作为信息载体的,内存开销较小。

特点:
在读写数据的时候,Parcelable是在内存中直接进行读写,
Serializable是通过使用IO流的形式将数据读写入在硬盘上。

侧重:
虽然Parcelable的性能要强于Serializable,但Parcelable无法将数据进行持久化,因此让要使用Serializable将数据保存在磁盘的时候。
Parcelable的性能比Serializable好,内存开销小,所以android中在内存间数据传输时推荐使用Parcelable,祖健健传递数据。
Serializable可将数据持久化方便保存,所以在需要保存或网络传输数据时选择Serializable。

使用:
Serializable实现较简单,只需要实现接口,提供SerializableID即可,如果没有序列化id,如果对象某些字段修改或添加,会导致已存储的数据无法读取。
Parcelable则需要实现writeToParcel、describeContents函数以及静态的CREATOR变量,实际上就是将如何分解和组合对象(打包和解包)的工作自己来定义,而序列化的这些操作完全由底层实现。

具体使用代码网上很多,这里就不贴出了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值