Android 序列化

来源:互联网 发布:服务器安装mysql数据库 编辑:程序博客网 时间:2024/06/05 19:20

1. 概念

序列化 (Serialization)将对象的状态信息转换为可以存储传输的形式的过程。

2. 目的

序列化目的:

  1. 永久的保存对象数据
    将对象数据保存在文件当中,或者是磁盘中;

  2. 通过序列化操作将对象数据在网络上进行传输
    由于网络传输是以字节流的方式对数据进行传输的, 因此序列化的目的是将对象数据转换成字节流的形式;

  3. 将对象数据在进程之间进行传递
    Activity 之间传递对象数据时,需要在当前的 Activity 中对对象数据进序列化操作.在另一个Activity中需要进行反序列化操作讲数据取出;

  4. 在Intent之间,基本的数据类型直接进行相关传递即可,但是一旦数据类型比较复杂的时候,就需要进行序列化操作。

3.Serializable 与 Parcelable的比较

类型 API 作用 区别 Serializable Java 自带的 API 持久化数据–保存对象的属性到本地文件、数据库、网络流、远程方法调用(RMI)以方便数据传输 可将数据持久化方便保存,需要保存或网络传输数据时选择Serializable Parcelable Android 特有 API 为了在程序内不同组件间以及不同Android程序间(AIDL)高效的传输数据 在内存开销方面较小,所以在内存间数据传输时推荐使用Parcelable,如activity间传输数据

性能比较:

Android 的 Parcelable 设计初衷就是因为Serializable效率过慢;
因此 Parcelable 的性能要强于 Serializable, 大致原因如下:

  1. 因为 Parcelable 在内存中使用, Serializable 使用在网络或者磁盘中,因此 Parcelable 在性能方面要强于 Serializable;

  2. Serializable 在序列化操作的时候会产生大量的临时变量
    (原因是使用了反射机制)从而导致GC的频繁调用,因此在性能上会稍微逊色

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

虽然 Parcelable 的性能要强于 Serializable, 但是仍然有特殊的情况需要使用Serializable, 而不去使用 Parcelable, 因为 Parcelable 无法将数据进行持久化, 因此在将数据保存在磁盘的时候, 仍然需要使用Serializable,因为 Parcelable 无法很好的将数据进行持久化。

原创粉丝点击