关于Android中的序列化Serializable和Parcelable的学习

简单地说,“序列化”就是将运行时的对象状态转换成二进制,然后保存到流,内存或者通过网络传输给其他端.

两者最大的区别在于 存储媒介的不同,Serializable使用 I/O 读写存储在硬盘上, 而 Parcelable是直接在内存中读写. 很明显,内存的读写速度通常大于 IO 读写,所以在Android中传递数据优先选择 Parcelable. Serializable会使用反射,序列化和反序列化过程需要大量I/O 操作. Parcelable 自已实现封送和解封(marshalled&unmarshalled)操作不需要用反射, 数据也存放在 Native 内存中,效率要快很多.

Serializable在序列化反序列化过程中使用反射并且会产生大量临时对象. Serializable的序列化与反序列化分别通过ObjectOutputStream和ObjectInputStream 进行.

Parcelable方式的实现原理是将一个完整的对象进行分解, 而分解后的每一部分都是Intent所支持的数据类型,这样也就实现传递对象的功能了

在需要保存或网络传输数据时选择Serializable,因为android不同版本Parcelable可能不同, 所以不推荐使用Parcelable进行数据持久化.

Parcelable不能使用在要将数据存储在磁盘上的情况, 因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下.

若将Parcel看成是一个流,则先通过writeToParcel把对象写到流里面, 再通过createFromParcel从流里读取对象,因此类实现的写入顺序和读出顺序必须一致

在两个Activity之间传递对象需要注意 对象的大小

Intent 中的 Bundle 是使用 Binder 机制进行数据传送的. 能使用的 Binder 的缓冲区是有大小限制的(有些手机是2M). 一个进程默认有16个Binder线程,所以一个线程能占用的缓冲区就更小了(大约一个线程可以占用 128 KB)

转载于:https://my.oschina.net/tanghaoo/blog/1923480

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值