Android——Serializable与Parcelable

Serializable的介绍

Serializable是JAVA提供的一个空接口,为对象提供标准的序列化与反序列化。
我们实现Serializable接口,需要让一个实体类实现此接口,并声明一个SerialVersionUID,其实SerialVersionUID并不是必须的,如果不指定SerialVersionUID也会反序列化成功,如果你修改其中的成员变量,并且没有声明SerialVersionUID那么就会反序列化失败。

Serializable的序列化

    public void Write(){
        //Serializable序列化
        User user = new User();
        user.setName("Liszt");
        user.setAge(19);
        ObjectOutputStream outputStream = null;
        try{
            //创建一个文件用于储存信息
            outputStream = new ObjectOutputStream(new FileOutputStream("text.txt"));
            //把User对象写入
            outputStream.writeObject(user);
            outputStream.close();
        }catch (Exception e) {
            e.printStackTrace();
        }
    }

Serializable的反序列化

public void Read(){
    //Serializable反序列化
    ObjectInputStream inputStream = null;
    try{
        //读取文件数据
        inputStream = new ObjectInputStream(new FileInputStream("text.txt"));
        User Newuser = (User) inputStream.readObject();
    }catch (Exception e){
        e.printStackTrace();
    }
}
实体类User
public class User implements Serializable{
    //public static final long serialVersionUID = 1L;
    public String name;
    public int age;
    public User(String name,int age){
        this.age = age;
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public String getName() {
        return name;
    }

Parcelable的介绍

Parcelable是android提供的序列化接口,使用起来比Serializable稍微麻烦一点,但效率高。

Parcelable的序列化与反序列化

public class User implements Parcelable {
    //public static final long serialVersionUID = 1L;
    public String name;
    public int age;
    public User(String name,int age){
        this.age = age;
        this.name = name;

    }
    public int getAge() {
        return age;
    }

    public String getName() {
        return name;
    }

    //当对象存在文件描述符时返回一,几乎大部分情况都返回0
    @Override
    public int describeContents() {
        return 0;
    }
    //序列化
    @Override
    public void writeToParcel(Parcel dest, int flags) {
      dest.writeString(name);
      dest.writeInt(age);
    }
    //反序列化
    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];
        }
    };
    //读取数据
    public User(Parcel in){
        name = in.readString();
        age = in.readInt();
    }
}

猜你喜欢

转载自blog.csdn.net/News53231323/article/details/114364316