Android 序列化之Serializable和Parcelable

简介

java中的 Serializable,Externalizable接口,Android 中的Parcelable都是为序列化和反序列化提供的,一致的认为是在 Android中推荐使用Parcelable,因为效率更高.

Java

Serializable

Java中的Serializable接口是一个标记接口,通过ObjectOutputStreamObjectInputStream进行序列化和反序列化.其中我们需要知道的一些内容包括:

  1. serialVersionUID用于标记序列化对象版本,不一致会反序列化失败,推荐使用 1L。
  2. 静态变量不参与序列化(序列化保存的是对象的状态,静态变量属于类的状态)
  3. 要想将父类对象也序列化,就需要让父类也实现Serializable 接口。
  4. 使用 transient 关键字可以使得字段不被序列化
  5. writeObjectreadObject可在序列化和反序列化过程中作加密操作
  6. 多次写入同一对象时,出第一次外,之后只保存写的引用。
  7. writeObject()readObject()都是private方法,因此Serializable 采用了反射机制。
  8. 如果我们和 Parcelable 一样来自己实现写入和读取,Serializable 的速度更快!

Externalizable

JDK 中提供的又一个序列化接口,与 Serializable不同的是,需要我们自己实现 writeExternalreadExternal来完成序列化,而不像 Serializable 有默认的 defaultReadObjectdefaultWriteObject

writeReplace& readResolve

一: 一般的调用顺序为:writeReplace – > writeObject –> readObject –> readResolve

二: 无论是实现Serializable接口,或是Externalizable接口,当从I/O流中读取对象时,readResolve方法都会被调用到,单例类一般需要复写这个.

三: 可以在序列化之前通过 writeReplace 将需要进行序列化的对象换成我们指定的对象.
四: 可以在readResolve方法中替换反序列化出来的对象(不是刚刚序列化回来的对象).

Android

Parcel& Parcelable

参考文章:Android - Parcel & Parcelable

总结

  1. Serializable 为了保存对象的属性到本地文件、数据库、网络流、rmi、或者在应用程序间传递
  2. Parcelable 是为 Android 程序间(AIDL)高效的传输数据而设计
  3. 内存间数据传输时推荐使用 Parcelable,而数据持久化推荐使用 Serializable,因为 android 不同版本 Parcelable 可能不同
  4. 如果和 Parcelable 一样来自己实现写入和读取,Serializable 的速度更快

参考

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值