Android开发之序列化接口

来源:互联网 发布:上帝和程序员的段子 编辑:程序博客网 时间:2024/05/22 14:33

        1. Serializable接口:Java提供的一个序列化接口,是一个空接口,为对象提供标准的序列化和反序列化操作,实现Serializable接口并声明一个serialVersionUID(Long)就可以实现序列化,其实声明一个serialVersionUID也并不是必需的,也能实现序列化,但这会对反序列化操作会有影响

        2. Parcelable接口:Android提供的一个序列化接口

        下面演示一下Serializable接口的序列化以及反序列化操作:

                         

        序列化操作:

                        

       反序列化操作

                        

        现在,序列化以及反序列化比较清楚了吧!但是在这里有两点需要特别提一下:① 静态成员变量属于类不属于对象,因此序列化时并不会参与;② 使用transient关键字标记的成员变量也不参与序列化操作

        下面讲讲Parcelable接口的序列化:

        

package com.xiaokai.entity;import android.os.Parcel;import android.os.Parcelable;public class User implements Parcelable{    private int userId;    private String password;    private boolean isMale;    public User(int userId, String password, boolean isMale) {        this.userId = userId;        this.password = password;        this.isMale = isMale;    }    private User(Parcel in) {        userId = in.readInt();        password = in.readString();        isMale = in.readInt() == 1;    }    //内容描述,几乎所有情况都return 0,除非当前对象中存在文件描述符时,return 1    @Override    public int describeContents() {        return 0;    }    //序列化过程    @Override    public void writeToParcel(Parcel dest, int flags) {        dest.writeInt(userId);        dest.writeString(password);        dest.writeInt(isMale ? 1 : 0);    }    public static final Parcelable .Creator<User> CREATOR = new Parcelable.Creator<User>(){        //创建反序列化对象        @Override        public User createFromParcel(Parcel source) {            return new User(source);        }        //创建反序列化对象数组        @Override        public User[] newArray(int size) {            return new User[size];        }    };}

        最后,比较一下两种序列化:① Serializable是Java中提供的一种序列化接口,使用简单但是开销很大,序列化过程和反序列化过程都需要大量 I/O 操作;② Parcelable是Android中的序列化方式,因此更适合使用在Android平台中,缺点就是使用起来麻烦一点,但是效率很高,这是Android推荐的序列化方式;③ Parcelable主要用在内存序列化上,通过Parcelable将对象序列化到存储设备中或者将对象序列化后通过网络传输也是可以的,但是这个过程会稍显复杂,因此在这两种情况下建议使用Serializable。

        


0 0