Android序列化 Serializable使用和Parcelable 插件化使用 以及两者区别

当activity之间需要传输自定义的实体类对象时,就需要将数据序列化。有两种方式可以实现:实现Serializable接口 和 实现Parcelable接口

Serializable:

是java提供的一个序列化接口,是个空接口,为对象提供标准的序列和反序列化操作。

使用:
public class HeadAbout extends Serializable{
    private static final long serialVersionUID = -5133337810444911333L;
    private String name;//名称
    private String content;//内容
    private String isDel;//是否删除
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }.....

serialVersionUID不写也可实现序列化,只是反序列化就不可以了,只有序列化数据中的serialVersionUID 和类中的serialVersionUID 值相同,才可以实现反序列化。

Parcelable:

是Android提供的一个序列化方式,它的过程比较复杂。但是Android Studio上面有一个插件,叫做android parcelable code generator我们可以用插件实现一键生成相关代码

插件android parcelable code generator安装:

1、打开File -> Settings -> Plugins ,输入Android Parcelable code generators搜索 如图:
这里写图片描述

点击install安装就可以了,安装成功后记得重启AndroidStudio

插件化使用:

建好一个实体类,写好属性,按下Alt+Insert,选择Palcelable,选择需要的属性,按下OK 如图:
这里写图片描述

代码如下:

public class HeadAbout implements Parcelable {
    private String name;//名称
    private String content;//内容
    private String isDel;//是否删除

    /**
     *返回当前对象的内容描述。
     * 如果含有文件标识符,则返回1,否则返回0。一般情况都是返回0
     */
    @Override
    public int describeContents() {
        return 0;
    }

    /**
     * 将当前对象写入序列化结构中
     * flags值为 0 或者 1  几乎所有情况都为 0  
     * 当为 1 时,标识当前对象需要作为返回值返回,不能立即释放资源  
     */
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(this.name);
        dest.writeString(this.content);
        dest.writeString(this.isDel);
    }

    public HeadAbout() {
    }

    //从序列化后的对象中创建原始对象
    protected HeadAbout(Parcel in) {
        this.name = in.readString();
        this.content = in.readString();
        this.isDel = in.readString();
    }

    public static final Parcelable.Creator<HeadAbout> CREATOR = new Parcelable.Creator<HeadAbout>() {
        //从序列化后的对象中创建原始对象
        @Override
        public HeadAbout createFromParcel(Parcel source) {
            return new HeadAbout(source);
        }

        //创建指定长度的原始对象数组
        @Override
        public HeadAbout[] newArray(int size) {
            return new HeadAbout[size];
        }
    };
}

Serializable和Parcelable区别

Serializable和Parcelable都能实现序列化,用于intent间的数据传递;
Serializable是java中的序列化接口,使用起来简单但是内存开销大,序列化和反序列化过程需要大量的IO操作;
Parcelable是Android中的序列化接口,效率高,内存开销较小,但是使用起来稍微麻烦;
Parcelable主要用在内存间数据传输,如Activity间数据传输
Serializable主要用在将对象序列化到存储设备或者将对象序列化后通过网络传输,Parcelable在这两个过程中复杂,所以推荐使用 Serializable

猜你喜欢

转载自blog.csdn.net/shanshan_1117/article/details/80500512