美文网首页
序列化Serializable和Parcelable的理解和区别

序列化Serializable和Parcelable的理解和区别

作者: 柳源居士 | 来源:发表于2018-02-28 15:57 被阅读3次

序列化是需要使数据对象在不同的activity之间传递。android使用Intent的putExtra()来传递数据,但是只支持有限的数据类型。所以需要使用序列化。
Serializable是java默认的序列化方式。
只需要默认实现Serializable接口就可以了。
使用Intent.putExtra(key,value)方式传递。读取时,通过getIntent().getSerializableExtra(key)读取。
Parcelable 是安卓的序列化方式。
不同在于Parcelable 是把对象按字段实现序列化,需要实现Parcelable 接口,并完成接口方法的实现,比Serializable方式要复杂。
通过实现Parcelable 接口,需要完成如下几个接口方法的实现:

 @Override
    public void writeToParcel(Parcel dest, int flags) {
       //读取顺序和写入顺序一致
        dest.writeString(name);
        dest.writeString(sex);
        dest.writeInt(age);
        
    }
@Override
    public int describeContents() {
        return 0;
    }

并完成接口类Creator的实现:
需要将泛型指定为需要实现序列化的类名

public static final Creator<Person> CREATOR = new Creator<Person>() {
        @Override
        public Person createFromParcel(Parcel in) {
            Person person=new Person();
            //读取顺序和写入顺序一致
            person.name=in.readString();
            person.sex=in.readString();
            person.age=in.readInt();
            return person;
        }

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

int describeContents()和public Person[] newArray(int size)使用默认就可。
需要注意的是,在写入序列化和读取的时候,字段要按照顺序进行写和读。
传递时,同样使用intent.putExtra(key,value)。
读取时,通过getIntent().getParcelableExtra(key)读取。

对比二者,java Serializable效率低一些,但有持久化需要时,支持好。
如果仅是在Activity之间传递数据,建议使用Parcelable。

相关文章

网友评论

      本文标题:序列化Serializable和Parcelable的理解和区别

      本文链接:https://www.haomeiwen.com/subject/hgacxftx.html