您的位置:首页 > 移动开发 > Android开发

Android 高级进阶- 数据序列化

2018-01-18 11:15 537 查看

前言:

序列化:将数据结构或对象转换成可用于存储或传输的数据格式的过程,在序列化期间,数据结构或对象将其状态信息写入到临时或持久性存储中;
反序列化:将序列化生成 的数据还原成数据结构或对象的过程。

一、Serializable

Serializable 是JDK提供的接口,序列化方式是基于磁盘或网络的。Serializable 接口是一种标识接口,也就是无需实现方法,便能实现序列化。
缺点:使用反射机制,在序列化过程中产生很多临时文件,容易触发垃圾回收,序列化的过程比较慢。
序列化过程中使用 serialVersionUID 的版本号和序列化的类关联,如果序列化和反序列化的UID不同,会报 InvalidClassException 异常;解决方式是显式指定 UID(IDE 为我们随机生成)。/**
* 直接实现 Serializable 接口完成序列化
*/
public class ZpSerializableBean implements Serializable{

private static final long serialVersionUID = 9165010654231l;

private int id;

private String name;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

二、Parcelable

Parcelable 是Android SDK 提供的,它是基于内存的,速度快;一般Android 中跨进程对象的传递 一般使用 Parcelable。缺点:需要生成大量的模板代码。可以使用Studio 的插件 Android Parcelable code generator ,一键生成模板代码。public class ZpParcelableBean implements Parcelable {

private int id;
private String name;

public ZpParcelableBean() {
}

// 接口内容的描述,一般默认返回0
@Override
public int describeContents() {
return 0;
}

// 序列化的方法,将类的数据写入到 Parcel 容器中
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(this.id);
dest.writeString(this.name);
}

protected ZpParcelableBean(Parcel in) {
this.id = in.readInt();
this.name = in.readString();
}

public static final Parcelable.Creator<ZpParcelableBean> CREATOR = new Parcelable.Creator<ZpParcelableBean>() {

// 反序列化方法,将 Parcel 还原成 Java 对象
@Override
public ZpParcelableBean createFromParcel(Parcel source) {
return new ZpParcelableBean(source);
}

// 提供给外部类反序列化这个数组使用
@Override
public ZpParcelableBean[] newArray(int size) {
return new ZpParcelableBean[size];
}
};

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: