安卓开发之序列化知识学习

当应用需要通过Intent和Binder传输类对象时就必须完成对象的序列化操作,所谓的序列化就是将这个对象转换为可传输或者可存储的状态,这样序列化后的对象或可以在网络上进行传输,或可以保存到本地。
序列化操作有两种方法:Serializable与Parcelable,要传递的类需要继承这两个接口,本质上都可以完成序列化操作,前者是java自带的,将一个完整的对象进行转换,后者是Android自带的,将一个完整的对象进行分解然后分别转换。
反序列化就相当于序列化的逆过程,将序列化后的对象“恢复出来”。

首先看java自带的Serializable,前面提到可以保存到本地或者直接传输,两种都看一下:
首先定义一个Person类,想要通过Intent和Binder传输Persion类对象就必须进行对象的序列化操作,这个要传输的类必须继承Serializable接口,里面还可以自定义一个序列化标识serialVersionUID,也可以不定义,但是序列化后的数据中的serialVersionUID要和当前类的serialVersionUID 相同才能正常的反序列化,因为序列化时也会将当前类的serialVersionUID也进行序列化。但是两种变量不会参与序列化过程:静态成员变量属于类,不属于对象以及用transient关键字标记的成员变量。
在这里插入图片描述
MainActivity中将Person类实例通过intent传输给SecondActivity:
在这里插入图片描述
SecondActivity收到MainActivity传过来的person实例通过getSerializableExtra方法恢复:
在这里插入图片描述
如果是要保存到本地呢?接下来就看下这种情况:
修改MainActivity代码:
在这里插入图片描述
使用ObjectOutputStream就可以完成对象的序列化过程。修改SecondActivity代码如下:
在这里插入图片描述
使用ObjectInputStream完成反序列化操作。点击效果如下:
在这里插入图片描述
在这里插入图片描述
接下来看Android推荐的Parcelable:
新建Fruit类作为要传输的类:
在这里插入图片描述
那么肯定要对其实现序列化,在Android中也就是implments Parcelable这个接口,这个接口中需要我们实现的主要方法有writeToParcel,describeContents,Creator CREATOR 。完成对象的序列化是依靠writeToParcel方法,完成对象的反序列化并且返回一个对象实例的是依靠Creator CREATOR,新建FruitParcelable并实现Parcelable接口:
在这里插入图片描述
MainActivity中序列化Fruit类对象并传输这个对象:
在这里插入图片描述
SecondActivity中恢复对象:
在这里插入图片描述
实现效果如下:
在这里插入图片描述
在这里插入图片描述
显而易见Parcelable代码量比前者多很多,但是后者效率会更快一些。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值