一、序列化的目的:


(1)永久的保存对象,将对象数据保存在文件、磁盘或者数据库中 。 (2)通过序列化操作将对象数据在网络上进行传输 。 (3)将对象序列化之后在进程间进行传输。 (3)在安卓中使用 Intent 进行传输时候,数据类型较为复杂的需要进行序列化操作 。 二、两者区别:


(1). 在使用内存的时候,Parcelable 类比 Serializable 性能高,所以推荐使用 Parcelable 类。 (2). Serializable 在序列化的时候会产生大量的临时变量,从而引起频繁的 GC。 (3). arcelable 不能使用在要将数据存储在磁盘上的情况。尽管 Serializable 效率低点,但在这种情况下,还是建 议你用 Serializable. (4). Serializable的实现,只需要实现Serializable接口即可。这只是给对象打了一个标记(UID),系统会自动将其序列化。而Parcelabel的实现,不仅需要实现Parcelabel接口,还需要在类中添加一个静态成员变量CREATOR,这个变量需要实现 Parcelable.Creator 接口,并实现读写的抽象方法。

Serializable 用法

public class User implements Serializable {

private String name;

private String age;



public User(String name, String age) {

this.name = name;

this.age = age;

}



public String getName() {

return name;

}



public void setName(String name) {

this.name = name;

}



public String getAge() {

return age;

}



public void setAge(String age) {

this.age = age;

}



@Override

public String toString() {

return "User{" +

"name='" + name + '\'' +

", age='" + age + '\'' +

'}';

}

} 通过上述代码中,可知Serializable序列化 之需要实现Serializable接口即可,使用比较简单;

Parcelable 用法

public class User implements Parcelable {

public int id;



public String age;



public String name;



@Override

public int describeContents() {

return 0;

}



@Override

public void writeToParcel(Parcel dest, int flags) {

dest.writeInt(this.id);

dest.writeString(this.age);

dest.writeString(this.name);

}



public User() {

}



protected User(Parcel in) {

this.id = in.readInt();

this.age = in.readInt();

this.name = in.readString();

}



public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {

@Override

public User createFromParcel(Parcel source) {

return new User(source);

}



@Override

public User[] newArray(int size) {

return new User[size];

}

};

} 通过代码可看Parcelabel的实现,不仅需要实现Parcelabel接口,还需要在类中添加一个静态成员变量CREATOR,这个变量需要实现 Parcelable.Creator 接口,并实现读写的抽象方法。


本文转自 [​​https://juejin.cn/post/6844903864756338701​​,如有侵权,请联系删除。