● 序列化
由于存在于内存中的对象都是暂时的,无法长期驻存,为了把对象的状态保持下来,这时需要把对象写入到磁盘或者其他介质中,这个过程就叫做序列化。
● 反序列化
反序列化恰恰是序列化的反向操作,也就是说,把已存在在磁盘或者其他介质中的对象,反序列化(读取)到内存中,以便后续操作,而这个过程就叫做反序列化。
概括性来说
序列化是指将对象实例的状态存储到存储媒体(磁盘或者其他介质)的过程。在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流。在随后对对象进行反序列化时,将创建出与原对象完全相同的副本。
对象的序列化 : 把Java对象转换为字节序列并存储至一个储存媒介的过程。
对象的反序列化:把字节序列恢复为Java对象的过程。
1、作用
Serializable的作用是为了 保存对象 的属性到本地文件、数据库、网络流、rmi以方便数据传输,当然这种传输可以是程序内的也可以是两个程序间的。
而Android的Parcelable的设计初衷是因为Serializable效率过慢,为了在程序内不同组件间以及不同Android程序间(AIDL)高效的 传输数据 而设计,这些数据仅在内存中存在,Parcelable是通过IBinder通信的消息的载体。
2、效率及选择
Parcelable的性能比Serializable好,在内存开销方面较小,所以在内存间数据传输时推荐使用Parcelable,如activity间传输数据,
而Serializable可将数据持久化方便保存,所以在需要保存或网络传输数据时选择Serializable,因为android不同版本Parcelable可能不同,所以不推荐使用Parcelable进行数据持久化。
3、编程实现
对于Serializable,类只需要实现Serializable接口,并提供一个序列化版本id(serialVersionUID)即可。
而Parcelable则需要实现writeToParcel、describeContents函数以及静态的CREATOR变量,实际上就是将如何打包和解包的工作自己来定义,而序列化的这些操作完全由底层实现。
1、在线安装
打开File -> Settings -> Pugins -> Browse Repositories 如下,输入android parcelable code generator:
然后就可以安装了,安装好了之后重启下就可以用啦~~
2、离线安装,点击这里下载安装包
下载好了之后,打开File -> Settings -> Pugins -> Install plugin from disk,选择你刚刚下载到的.zip压缩包,然后OK,重启就行啦
3、使用方法:
新建好一个实体类后写好属性:
按下Alt+Insert,选择Palcelable,选择需要的属性,按下OK,搞定~~很简单有木有!
1、首先建好一个测试用的person实体类:
2、然后一键生成之后如下,看看是不是你想要的,是的话就继续往下看:
package com.kroclin.myapplication;
import android.os.Parcel;
import android.os.Parcelable;
/**
* Created by KrocLin on 2014/11/7.
*/
public class Person implements Parcelable {
private int age;
private String name;
private String gender;
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(this.age);
dest.writeString(this.name);
dest.writeString(this.gender);
}
public Person() {
}
private Person(Parcel in) {
this.age = in.readInt();
this.name = in.readString();
this.gender = in.readString();
}
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
public Person createFromParcel(Parcel source) {
return new Person(source);
}
public Person[] newArray(int size) {
return new Person[size];
}
};
}
Android Studio酷炫插件(一)——自动化快速实现Parcelable接口序列化
serialVersionUID的作用不用说,唯一指定一个对象,如果没有制指定,那么每次修改对象都会自动生成一个serialVersionUID,那么序列号和反序列化就可能出问题,系统根据serialVersionUID认为这是俩个对象。
在eclipse中很容易的就能自动提示添加serialVersionUID,而在AndroidStudio中却没有提示,原来是as的检查配置中默认是关掉对serialVersionUID的检查的,那么我们打开就可以。
1、File -> Settings… -> Editor -> Inspections -> Serialization issues[在java类目下] -> Serializable class without ‘serialVersionUID’(选中)
2、进入实现了Serializable中的类,选中类名,Alt+Enter弹出提示,然后直接导入完成
demo:
public class MyProcess implements Serializable {
private static final long serialVersionUID = 7322176390951711093L;
private int age;
private String name;
private String gender;
public MyProcess() {
}
public MyProcess(int age, String name, String gender) {
this.age = age;
this.name = name;
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "MyProcess{" +
"age=" + age +
", name='" + name + '\'' +
", gender='" + gender + '\'' +
'}';
}
}
Android Studio类中实现Serializable自动生成serialVersionUID
如何让Android Studio 自动生成 serialVersionUID