前言

Android开发中对应对象的序列化是比较常用的,序列化允许你将对象的状态保存到一个字节流中,以便可以在不同的组件或进程之间传递这些对象。

序列化常用的类有ParcelableSerializable相关知识,以及对比一下。记录一下,方便自己后续查阅或回顾。

正文

Parcelable

public class Book implements Parcelable {

    private String name;
    private int page;
    private long value;

    protected Book(Parcel in) {
        name = in.readString();
        page = in.readInt();
        value = in.readLong();
    }

    public static final Creator<Book> CREATOR = new Creator<Book>() {
        @Override
        public Book createFromParcel(Parcel in) {
            return new Book(in);
        }

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

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

    @Override
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeInt(page);
        dest.writeLong(value);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPage() {
        return page;
    }

    public void setPage(int page) {
        this.page = page;
    }

    public long getValue() {
        return value;
    }

    public void setValue(long value) {
        this.value = value;
    }

}

Serializable

public class Book implements Serializable {

    private String name;
    private int page;
    private long value;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPage() {
        return page;
    }

    public void setPage(int page) {
        this.page = page;
    }

    public long getValue() {
        return value;
    }

    public void setValue(long value) {
        this.value = value;
    }
}

区别

性能
Parcelable

性能高效。

Parcelable是专门为Android设计的序列化机制,它使用基于描述符的方式,避免了Java反射的开销,因此序列化和反序列化速度更快。‌

Android特有的接口。

Serializable

性能相对低些。

使用反射机制进行序列化和反序列化对象。

使用Java标准库的一部分,可夸平台。

安全性
Parcelable

由于Parcelable需要显式地为每个字段编写序列化和反序列化的逻辑,这有助于确保数据在传输过程中不会被篡改,因此更安全。

Serializable

基于Java反射机制,可能会受到恶意攻击,如反序列化漏洞等,安全性较低。

使用复杂度
Parcelable

复杂。

实现相对简单,只需要实现两个方法:writeToParcel和describeContents

Android Studio开发工具部分代码可以自动生成。

Serializable

简单。

只需让类实现 Serializable 接口,无需额外的方法实现。

用途
Parcelable
  1. Android 特有: 主要用于 Android 应用内的数据传输,特别是在 Activity 之间通过 Intent 传递数据时。

  2. IPC 优化: 在涉及进程间通信时,Parcelable 通常比 Serializable 更高效。

适用于需要在应用内部或不同组件间高效传输数据的情况,如Intent、Bundle等。‌

Serializable
  1. 跨平台兼容: 适用于任何 Java 环境,不仅限于 Android。

  2. 远程调用: 常用于 Java RMI(远程方法调用)和其他需要跨网络传输对象的场景。

适用于需要将对象持久化存储或通过网络传输到其他应用的情况。

参考文章

  1. Parcelable 和 Serializable 的区别

相关文章

暂无评论

none
暂无评论...