Parcelable 和 Serializable的区别和使用 | 您所在的位置:网站首页 › cracker和hacker的区别 › 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 CREATOR = new Creator() { @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 |
CopyRight 2018-2019 实验室设备网 版权所有 |