😀
序列化是对象数据传输过程的重要环境,主要目的在于将对象转换为可传输对象,只要是能将对象转换后的数据传递给接收方,并且接收方可以根据一定规则,重新构造出原始对象的方法,都可以称为序列化。 Android里使用较为广泛的序列化方法主要有:Serializable、Parcelable、JSON

主要序列化手段

  • Serializable:
    • Java提供的标准序列化接口,在Android场景下性能不佳。
    • 使用反射机制,序列化和反序列化速度较慢
    • 可以将对象序列化为字节流
  • Parcelable:
    • Android特有的序列化方式,专门针对Android进行了优化。
    • 将对象分解为原始数据类型,主要讲要传输的对象,写入到Parcel对象进行传递。
  • JSON:
    • 序列化灵活且与平台无关,适合网络传输或在应用组件间传递结构化数据。

Serializable

优点

  • 简单易用:仅需声明实现 Serializable 接口即可,JVM 会自动处理序列化过程(反射)。
  • 自动处理:所有未标记为 transient 的成员变量都将被自动序列化,无需关心具体的序列化细节。

缺点

  • 性能较低
    • Serializable 使用反射来实现对象的序列化
    • 反射会导致比 Parcelable 更高的 CPU、内存消耗,尤其在复杂对象或有大量对象需要序列化时。

使用

实现 Serializable 接口通常不需要编写额外的序列化代码,除非需要处理特定的序列化逻辑:

Parcelable

优点

  • 高效
    • Parcelable 专为 Android 设计,特别适合在内存中快速传递数据。
  • 灵活
    • 可以自定义数据的序列化和反序列化方式,控制哪些成员被序列化以及如何序列化,减少了不必要的开销。

缺点

  • 实现复杂
    • 实现 Parcelable 接口比实现 Serializable 接口复杂,需要手动实现序列化逻辑。
    • 类成员写入Parcel和从Parcel读出顺序必须保持一致。
    • 每次对象的数据结构发生变化时,都需要重新修改Parcelable的实现,否则会导致反序列化失败。

使用

实现 Parcelable 需要重写 writeToParcel 方法来定义数据写入逻辑,同时提供一个 CREATOR 字段来创建对象和对象数组:

Json序列化

优点

  • 易于理解
    • JSON 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。
  • 灵活性高
    • JSON 格式存储为文本,可以轻松转换为任何需要的对象,不受语言或平台的限制。

缺点

  • 性能差
    • 相比 Parcelable,JSON 文本解析和生成涉及字符串处理,性能较低。
实现细节: 使用 Gson 等库来处理 JSON 数据的序列化和反序列化:

参考、推荐

IPC之BinderAndroid Bundle
Loading...