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

当应用需要通过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代码量比前者多很多,但是后者效率会更快一些。

猜你喜欢

转载自blog.csdn.net/weixin_42011443/article/details/106730765
今日推荐