Parcelable 和 Serializable的区别和使用

序列化:为了保存在内存中的各种对象的状态,并可以把保存的对象的状态读出来。

一、Seralizable介绍:

1.Serializable 是java的序列化技术,最简单的使用方式为在需要序列化的class增加implements Serializable,并增加一个唯一个序列化id: private static final long serialVersionUID = 1L; 默认方式最好直接设置为1L,因为java  sdk会自动进行hash计算,并生成唯一的UID值。手动设置serialVersionUID的好处是当前class如果改变了成员变量,比如增加或者删除之后,这个UID是不改变的,那么反序列化就不会失败;自动设置则在改变了成员变量之后就会重新计算获得新的UID,从而导致失败。不过,大多数情况下两者都可以。

2.Seralizable相对Parcelable而言,好处就是非常简单,只需对需要序列化的类class执行就可以,不需要手动去处理序列化和反序列化的过程,所以常常用于网络请求数据处理,Activity之间传递值的使用。

Activiyt之间传递如图:




3.Seralizable无法序列化静态变量,使用transient修饰的对象也无法序列化。

4.当一个父类实现序列化,子类自动实现序列化,不需要再显示实现Serializable接口。

二、Parcelable介绍:

1.Parcelable是android特有的序列化API,它的出现是为了解决Serializable在序列化的过程中消耗资源严重的问题,但是因为本身使用需要手动处理序列化和反序列化过程,会与具体的代码绑定,使用较为繁琐,一般只获取内存数据的时候使用。

2.而Parcelable依赖于Parcel,Parcel的意思是包装,实现原理是在内存中建立一块共享数据块,序列化和反序列化均是操作这一块的数据,如此来实现。


3.Parcelable的三个过程:序列化、反序列化和描述

序列化:

@Override
    public void writeToParcel(Parcel dest, int flags) {

    }

反序列化:

class User{

    }

    public static final Creator<User> CREATOR = new Creator<User>() {
        @Override
        public User createFromParcel(Parcel source) {
            return null;
        }

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

描述:

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

序列化的时候使用:writeXX

反序列化的时候使用:readXX

描述describecontents:


一般情况下设置为0,特别的为

public static final int CONTENTS_FILE_DESCRIPTOR = 0x0001;

这种是当要求为file descriptor(文件描述符)被序列化的情况。


【参考文档】:

https://developer.android.com/reference/android/os/Parcelable

http://www.developerphil.com/parcelable-vs-serializable/

https://blog.csdn.net/Justin_1107/article/details/72903006



  • 7
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值