Parcelable 和 Serializable的区别和使用 您所在的位置:网站首页 cracker和hacker的区别 Parcelable 和 Serializable的区别和使用

Parcelable 和 Serializable的区别和使用

2023-09-05 04:57| 来源: 网络整理| 查看: 265

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

一、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 实验室设备网 版权所有