Android中的序列化

2016-01-06  本文已影响78人  一个大嘴巴子掀翻在地

1.为什么要序列化

  1. 将对象的字节序列保存到本地文件。
  2. 在网络中传递对象。
  3. 在进程或者Activity中传递对象。

2.序列化方式

序列化分为两种:一种是实现Serializable接口,另一种是实现Parcelable接口。

  1. 实现Serializable接口
    直接实现Serializable接口即可,此方法支持Java SE和Android,示例代码如下:
public class Student implements Serializable { 
    private String name; private int age; 
    public String getName(){ 
        return name; 
    } 
    public void setName(String name){ 
        this.name = name; 
    } 
    public int getAge(){ 
        return age; 
    } 
    public void setAge(int age){ 
        this.age = age; 
    }
}
  1. 实现Parcelable接口

采用此方法相对复杂,且仅支持Android,使用步骤如下:

示例代码如下:

public class Student implements Parcelable { 
    private String name; 
    private int age; 

    public String getName() { 
        return name; 
    } 

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

    public int getAge() { 
        return age;
    } 

    public void setAge(int age) { 
        this.age = age; 
    }  

    @Override 
    public int describeContents() { 
        return 0; 
    } 

    @Override 
    public void writeToParcel(Parcel out, int flags) { 
        out.writeString(name); 
        out.writeInt(age); 
    } 

    public static final Parcelable.Creator<student> CREATOR = new Parcelable.Creator<student>() { 
        @Override 
        public Student[] newArray(int size) { 
            return new Student[size]; 
        } 

        @Override 
        public Student createFromParcel(Parcel in) { 
            return new Student(in); 
        }
    }; 
    /** * 属性的读取顺序必须与writeToParcel()方法一致 */ 
    public Student(Parcel in) { 
        name = in.readString(); age = in.readInt(); 
    }
}

3.Serializable与Parcelabel的优缺点

  1. 采用Serializable方式使用简单,只需要实现Serializable接口即可,但该方式采用了反射机制,所以效率较低。
  2. 采用Parcelabel方式使用相对复杂,除了需要实现Parcelabel接口,还要添加CREATOR变量,但此种方式效率明显高于Serializable方式。

4.适用范围

Parcelabel适合在进程间和Activity之间传递数据,而Serializable更倾向于网络传输或者将对象本地化。

上一篇下一篇

猜你喜欢

热点阅读