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;
}
}
相关文章推荐
- Android进阶之Fragment与Activity之间的数据交互
- Android几种数据存储方式及bean对象序列化
- Android进阶——使用Pull解析和生成轻量级数据XML
- Android高级进阶三 Android OpenGL | ES开发框架
- 【Android一般进阶】引用数据类型euqals()与==作用相同
- Android 高级进阶- Android 开源项目
- Android 数据Parcel序列化过程源码分析
- Android入门进阶教程(20)-ContentProvider 数据共享
- Android复杂数据模型序列化Parcelable
- android: activity之间传递复杂数据类型[使用Serializable序列化或者Parcelable序列化]
- Android高级进阶 - 动画之逐帧动画(Frame Animation)
- Android中数据序列化之Serializable与Parcelable
- Android高级进阶-换肤
- Android进阶知识点(fragment之间数据传递,对话框,工具栏)
- Android高级进阶四 Android OpenGL开发多边形
- 【Android进阶】怎样使用文件来保存程序中的数据
- Android 数据序列化总结
- Android 数据库进阶之数据库升级连带保留数据
- Android高级进阶之自定义定义控件的属性
- Android 高级进阶 - View的绘制流程