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

序列化是需要使数据对象在不同的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。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文出自 “阿敏其人” 简书博客,转载或引用请注明出处。 一、android为什么要序列化?什么是序列化,怎么进行...
    阿敏其人阅读 44,700评论 20 100
  • 1、Intent 可以传递的数据类型 在 Intent和IntentFilters(1) 中我们知道了通过 Int...
    CnPeng阅读 7,823评论 0 10
  • 【Android Activity】 什么是 Activity? 四大组件之一,通常一个用户交互界面对应一个 ac...
    Rtia阅读 9,209评论 3 18
  • JAVA序列化机制的深入研究 对象序列化的最主要的用处就是在传递,和保存对象(object)的时候,保证对象的完整...
    时待吾阅读 13,734评论 0 24
  • 一个应用中总会存在多个活动,通过这些活动的相互跳转,数据传递,逻辑处理,便可完成一个应用的功能。在各个活动的跳转时...
    吸给007阅读 3,558评论 0 2