美文网首页
Android中的序列化

Android中的序列化

作者: 一个大嘴巴子掀翻在地 | 来源:发表于2016-01-06 17:45 被阅读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,使用步骤如下:

  • 实现Parcelable接口,即implements Parcelable。
  • 重写writeToParcel()方法,将对象序列化为一个Parcel对象。
  • 重写describeContents()方法,内容接口描述,默认返回0即可(暂时不清楚具体含义)。
  • 实例化静态内部对象CREATOR(变量必须用static final修饰,变量名必须为CREATOR,并且为大写)。

示例代码如下:

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更倾向于网络传输或者将对象本地化。

相关文章

网友评论

      本文标题:Android中的序列化

      本文链接:https://www.haomeiwen.com/subject/ypixkttx.html