Android序列化相关

来源:互联网 发布:cobol工资高还是java 编辑:程序博客网 时间:2024/05/21 17:15
1.serializable序列化与反序列化
serializable是java提供的序列化的机制,实现起来真的他妈有点方便:只要实现serializable接口就可以了。
(1)一个类实现了serializable接口,但是它的父类并没有实现serializable接口,那么父类里的成员变量是不会被序列化到本地的。
一个类中有一个类的对象,而而这个类并没有实现serializable接口,那么这个类的对象也是不会被序列化到本地的。这里需要提醒的一点,java还提供了一个关键字(transient)来限制成员变量的序列化。
(2)我们在实现序列话接口的,eclipse总会提醒我们能要生成一个成员变量serialVersionUID,好像这个变量有没有并不影响我们序列化这个类,确实一般来说是无关大雅的。这个变量主要是为了记录我们序列化或者反序列化的时候的版本信息。打个比方吧,你已经写好了一个类,而且已经序列化到本地了,这个时候你为这个类新添加了成员变量,在这个时候需要序列化或者反序列化如果没有这个serialVersionUID变量,那系统就会认为这是一个新的类,对它进行重新的序列化。
2.parcelable
parcelable是android提供的一种机制,从严格意义上来讲,parcelable应该谈不上序列化和反序列化,它是android提供用来ipc间传递的。
(1)parcelable实现上来说相对会比较复杂一点,需要实现三个方法:describeContents,writeToParcel,Creator
下面给一个具体的实现的例子
public class TestParcelable implements Parcelable {    private String name;    private int age;    private int gender;    public TestParcelable(Parcel arg0) {        // TODO Auto-generated constructor stub        this.name=arg0.readString();        this.age=arg0.readInt();        this.gender=arg0.readInt();    }    @Override    public int describeContents() {        return 0;    }    @Override    public void writeToParcel(Parcel parcel, int arg1) {        parcel.writeString(name);           parcel.writeInt(age);        parcel.writeInt(gender);    }    public static final Creator<TestParcelable> CREATOR=new Creator<TestParcelable>() {        @Override        public TestParcelable createFromParcel(Parcel arg0) {            // TODO Auto-generated method stub            return new TestParcelable(arg0);        }        @Override        public TestParcelable[] newArray(int size) {            // TODO Auto-generated method stub            return new TestParcelable[size];        }    };}


3serializable和parcelable的区别
(1)serializable主要是用于数据的持久化存储,而parcelable主要用于ipc间数据传递,不太适合于永久存储。
(2)从序列化和反序列化的速度上讲,国外有人做过测试,parcelable要比serializable快10倍。这里需要提醒的是serializable序列化的速度真的是不咋地。
0 0
原创粉丝点击