Android序列化之Parcelable和Serializable的使用详解
Android序列化技术详解 - Parcelable和Serializable的使用详解 序列化是指将对象实例的状态存储到存储媒体(磁盘或者其他介质)的过程。在 Android 开发中,序列化是一种常用的数据存储和传输方式。今天,我们将详细探讨 Android 序列化技术中 Parcelable 和 Serializable 两个接口的使用详解。 序列化和反序列化 序列化是将对象实例的状态存储到存储媒体(磁盘或者其他介质)的过程。在序列化过程中,对象的公共字段和私有字段以及类的名称(包括类所在的程序集)被转换为字节流,然后再把字节流写入数据流。在随后对对象进行反序列化时,将创建出与原对象完全相同的副本。 实现序列化的必要条件 一个对象要实现序列化操作,该类就必须实现了 Serializable 接口或者 Parcelable 接口,其中 Serializable 接口是在 Java 中的序列化抽象类,而 Parcelable 接口则是 Android 中特有的序列化接口。在某些情况下,Parcelable 接口实现的序列化更为高效。 Parcelable 和 Serializable 的区别 Parcelable 和 Serializable 是两个序列化接口,它们的作用是让实现了其中一个接口的类的对象能够被序列化和反序列化。 * Serializable 是 Java 提供的序列化接口,它是一个空的接口,仅标识该类型可序列化的,具体的序列化/反序列化工作由 ObjectInputStream(readObject)/ObjectOutputStream(writeObject)完成,这个过程包含大量的 I/O 操作,使用比较简单,但需要考量性能的影响。使用场景:将对象持久化到存储介质或者通过网络传输。 * Parcelable 接口是 Android 平台下的序列化接口,通常跨进程传递的数据都要正确实现这个接口,比如 Intent,Bitmap 等。Parcelable 实现起来比 Serializable 复杂,但性能较好。使用场景:在内存中实现序列化,例如跨进程传递。 自定义一个类实现 Parcelable 要自定义一个类让其实现 Parcelable,需要经过以下步骤: 1. 实现 Parcelable 接口,并实现接口中的方法。 2. 创建一个 Parcelable 接口内部的接口类型 Creator 的成员,内部需要用到一个带一个 Parcel 参数的构造方法。 例如: ```java public class User implements Parcelable { private int userId; private String userName; private boolean isMan; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(userId); dest.writeString(userName); dest.writeInt(isMan ? 1 : 0); } protected User(Parcel in) { userId = in.readInt(); userName = in.readString(); isMan = in.readByte() != 0; } public static final Creator<User> CREATOR = new Creator<User>() { @Override public User createFromParcel(Parcel in) { return new User(in); } @Override public User[] newArray(int size) { return new User[size]; } }; } ``` 结论 Android 序列化技术是 Android 开发中的一种常用的数据存储和传输方式。Parcelable 和 Serializable 是两个常用的序列化接口,它们的作用是让实现了其中一个接口的类的对象能够被序列化和反序列化。通过本篇文章,我们了解了序列化和反序列化的概念、实现序列化的必要条件、Parcelable 和 Serializable 的区别,以及自定义一个类实现 Parcelable 的步骤。
- 粉丝: 4
- 资源: 904
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于Django和OpenCV的智能车视频处理系统.zip
- (源码)基于ESP8266的WebDAV服务器与3D打印机管理系统.zip
- (源码)基于Nio实现的Mycat 2.0数据库代理系统.zip
- (源码)基于Java的高校学生就业管理系统.zip
- (源码)基于Spring Boot框架的博客系统.zip
- (源码)基于Spring Boot框架的博客管理系统.zip
- (源码)基于ESP8266和Blynk的IR设备控制系统.zip
- (源码)基于Java和JSP的校园论坛系统.zip
- (源码)基于ROS Kinetic框架的AGV激光雷达导航与SLAM系统.zip
- (源码)基于PythonDjango框架的资产管理系统.zip