Andorid序列化方式Serizlizable和Parcelable
来源:互联网 发布:mac魔兽争霸3打开黑屏 编辑:程序博客网 时间:2024/06/06 05:30
在开发过程中,有时我们需要对对象进行传输,或者将对象进行持久化存储,这时我们就需要实现对象的序列化。
在Android开发过程中,对象的序列化主要有两种方式:1.实现Serializable接口 2.实现Parcelable接口。下面就对着两种方式进行一一介绍。
1.Serializable接口
Serializable是Java提供的一种序列化借口,可以为对象提供标准的系列化和反序列化操作。因为他是一个空的接口,所以使用起来非常简单,只需要在构建实体类的时候,类实现Serializable接口就可以了。
<span style="white-space:pre"></span>public class Bean implements Serializable{
注意:当我们需要反序列化的时候,最好声明一个serialVersionUID,它是用来辅助序列化和反序列化过程的,被序列化后的数据中的serialVersionUID只有和当前类的serialVersionUID相同才能正常地反序列化。
<span style="white-space:pre"></span>private static final long serialVersionUID=123456789L;serialVersionUID的工作原理:
对象在序列化的时候,系统会把当前类的serialVersionUID也一起写入序列化的后的结果中,当我们需要反序列化的时候,系统会去检测目标中的serizlVersionUID,看是否与我们在类中申明的UID一致,一致则反序列化成功。否则则说明序列化类不匹配,则失败。
注意:静态成员变量属于类不属于对象,所以不能够序列化。用transient关键字标记的成员变量不参与序列化。
2.Parcelable接口
Parcelable也是一个接口,只要类实现了这个接口,就可以实现序列化,并可以通过intent和Binder进行传递。
但是他不同的时有几个接口,下面展示一下它的典型用例。
/** * Created by 2 on 2015/12/25. */public class UserBean implements Parcelable{ private int id; private String name; //从序列化后的对象中创建原始对象 protected UserBean(Parcel in) { //Pancel内部包装了可序列化的数据,可以在Binder中自有传输 id = in.readInt(); name = in.readString(); } //构造方法 public UserBean(int id, String name) { this.id = id; this.name = name; } // public static final Creator<UserBean> CREATOR = new Creator<UserBean>() { //从序列化后的对象中创建原始对象 @Override public UserBean createFromParcel(Parcel in) { return new UserBean(in); } //创建指定长度的原始对象数组 @Override public UserBean[] newArray(int size) { return new UserBean[size]; } }; //返回当前对象的内容描述(如果含有内容描述就返回1,否则返回0) @Override public int describeContents() { return 0; } //将当前对象写入序列化结构中 @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(id); dest.writeString(name); }}在上面的代码中,我们在序列化的过程中,需要实现的有:序列化、反序列化、内容描述
1.序列化:序列化的功能是由writeToParcel方法来完成,最终通过Parcel中的一系列write方法来完成
2.反序列化:由Creator来完成,其内部标注了如何创建序列化对象和数组,并通过Parcel中的read方法来完成反序
列化过程。
3.内容描述:由describeContents方法来完成,当前对象有文件描述时返回1,否则返回0。
3:Parcelable和Serializable的区别。
大家可能会奇怪,这两个接口都能用intent传递数据,而且Parcelable麻烦那么多,为什么还不舍弃呢。
其实:Serializable虽然用起来简单,但是其在序列化和反序列化的过程中,会进行大量的I/O操作,所以开销大,效率低。
而Parcelable是Android特有的序列化方式,虽然用起来麻烦点,但是效率非常高。所以更适合用在Android开发过程中。
所以,当我们需要序列化一些比较大的对象的时候,最好还是选择Parcelable来进行序列化,一些小的对象,
可以通过Serializable来进行序列化,从而减少代码量。
- Andorid序列化方式Serizlizable和Parcelable
- Serizlizable Parcelable
- Android中两种序列化方式的比较Serializable和Parcelable
- Android中两种序列化方式的比较Serializable和Parcelable
- 对象序列化的两种方式 Serializable和Parcelable
- Android中两种序列化方式的比较Serializable和Parcelable
- Parcelable和Serializable序列化
- Serializable和Parcelable序列化
- 序列化Parcelable 和 Serializable
- Serizlizable
- Intent传递对象信息方式Parcelable和Serializable(序列化)
- Android 进阶6:两种序列化方式 Serializable 和 Parcelable
- Parcelable 序列化和反序列化
- Serializable和Parcelable实现序列化
- Serializable和Parcelable实现序列化
- android序列化 Parcelable和Serializable接口
- Android序列化:Serializable和Parcelable详解
- Android 序列化 Parcelable和Serializable 浅谈
- 在父页面调用子页面的JS方法
- android bionic (Android的C/C++调用库)目录结构
- 用一个神奇的公式来计算用户体验
- HTTP POST和GET的区别
- Android中Service(服务)详解,四大组件之一:Service
- Andorid序列化方式Serizlizable和Parcelable
- 无法打开物理文件 操作系统错误 5:拒绝访问 SQL Sever
- RecyclerView 下拉刷新上拉加载(类似PullToRfresh)
- android属性动画animator
- 杭电-5567-水题
- bundler_0.4在windows下的编译
- C++ 11 在 Qt 5 中的应用
- 安卓实现应用评分
- How to use an FC category as Homepage / Frontpage