返回

Android 数据存储和传输之序列化与反序列化

Android

在 Android 开发中,数据存储和传输是至关重要的任务。其中,序列化和反序列化扮演着重要的角色。序列化是将对象转化为字节序列的过程,而反序列化则是将字节序列还原为对象的过程。通过序列化,我们可以将对象数据存储在本地文件系统或网络上,或通过网络传输给其他设备。

序列化的优点

  • 持久化: 序列化允许我们将对象数据存储在本地文件中,以便在应用重启或设备更换时仍可访问。
  • 网络传输: 序列化可以将对象数据转化为字节序列,以便通过网络传输给其他设备。
  • 跨进程通信: 序列化可以将对象数据传递给不同的进程,例如,从主进程传递数据给服务进程。

Android 中的序列化

Android 提供了多种序列化和反序列化机制,包括:

  • Parcelable: 一种轻量级序列化机制,适用于小数据集。
  • Serializable: 一种重量级序列化机制,适用于大数据集。
  • Gson: 一个用于 JSON 序列化的库。

本教程将重点介绍 Parcelable 序列化机制。

Parcelable 序列化

Parcelable 是 Android 中一种轻量级序列化机制,它将对象数据序列化为字节数组。Parcelable 序列化具有以下优点:

  • 高效: Parcelable 序列化速度很快,因为它直接将对象数据序列化为字节数组,而无需使用中间格式。
  • 轻量级: Parcelable 序列化后的字节数组相对较小,这使得它适用于小数据集的传输。

使用 Parcelable 序列化

为了使用 Parcelable 序列化,需要实现以下步骤:

  1. 创建一个实现了 Parcelable 接口的类。
  2. 实现 writeToParcel() 方法,将对象数据序列化为字节数组。
  3. 实现 createFromParcel() 方法,从字节数组中反序列化对象数据。

示例代码

public class Person implements Parcelable {

    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeInt(age);
    }

    @Override
    public int describeContents() {
        return 0;
    }

    public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() {

        @Override
        public Person createFromParcel(Parcel source) {
            String name = source.readString();
            int age = source.readInt();
            return new Person(name, age);
        }

        @Override
        public Person[] newArray(int size) {
            return new Person[size];
        }
    };
}

使用反序列化

要从字节数组中反序列化对象,需要使用 createFromParcel() 方法。该方法将字节数组作为输入,并返回一个新创建的对象。

Person person = Person.CREATOR.createFromParcel(parcel);

结论

序列化和反序列化是 Android 开发中重要的技术,它们允许我们在本地存储和传输对象数据。通过理解和使用 Parcelable 序列化机制,我们可以高效且可靠地处理对象数据。