黄大仙爱编程

每天进步一点点

Android当中的序列化

序列化

序列化:把对象转换成为字节序列的过程;
反序列化:把字节序列转换成为对象的过程;
当使用Intent或者Binder传递对象的时候,需要将对象序列化。在Android中有两种方式可以将对象进行序列化,第一种是Serializable,另一种是Parcelable。

Serializable

使用Serializable可以很简单的将对象进行序列化,只需要继承这个接口,并加上serialVersionUID就可以了,如下所示

public class Student implements Serializable{
    private static final long serialVersionUID=12345;
    private String name;
    private int gender;

    public Student(String name,int gender){
        this.name = name;
        this.gender = gender;
    }
}

当然也可以不加serialVersionUID,系统就会根据类的结构算出一个serialVersionUID,所以如果类的结构发生了变化,那么相应的serialVersionUID也会发生变化。因此如果类已经发生了变化,但又想从以前的序列当中恢复,那就最好自己指定serialVersionUID,这样才能尽最大可能恢复当初的对象。

Parcelable

使用Parcelable序列化,需要继承Parcelable接口,并实现相应的方法,如下所示

public class Student implements Parcelable{

    private String name;
    private int gender;

    public Student(String name,int gender){
        this.name = name;
        this.gender = gender;
    }

    protected Student(Parcel in) {
        this.name = in.readString();
        this.gender = in.readInt();
    }

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

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

    //返回当前对象的内容描述,几乎所有情况都返回0,仅在当前对象中存在文件描述符时返回1
    @Override
    public int describeContents() {
        return 0;
    }

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

需要注意的是,读出的顺序和写入的顺序要一致。从以上代码可以看出,Parcelable实现起来比Serializable复杂得多。

比较

Serializable实现的过程当中使用了反射,因此性能不是特别好,但是能够应用到所有需要序列化的场景当中。
Parcelable性能比Serializable要好,但是如果要将对象写入到磁盘当中,最好使用Serializable,因为当外界数据有变化的时候,Parcelable无法很好的保证数据的持续性。

区别 Serializable Parcelable
所属API Java Android
性能
使用场景 序列化到本地,网络传输 内存当中数据传输
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hbdatouerzi/article/details/79963583
文章标签: Parcelable Serializable
个人分类: android
上一篇嵌套Fragment的转场动画问题
下一篇APP组件化
想对作者说点什么? 我来说一句

二进制序列化

2012年08月07日 2.97MB 下载

android序列化

2013年12月18日 34KB 下载

android序列化(Parcelable)

2017年02月15日 25.42MB 下载

android 二进制传输 序列化

2012年09月03日 151KB 下载

Android DatePickerDialog的使用

2013年07月01日 4KB 下载

没有更多推荐了,返回首页

关闭
关闭