共计 1720 个字符,预计需要花费 5 分钟才能阅读完成。
一、序列化的目标:
(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<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];
}
};
}
通过代码可看 Parcelabel 的实现,不仅须要实现 Parcelabel 接口,还须要在类中增加一个动态成员变量 CREATOR,这个变量须要实现 Parcelable.Creator 接口,并实现读写的形象办法。
相干视频举荐:
【安卓面试必看】Serializable 原理以及面试点详解
本文转自 https://juejin.cn/post/6844903864756338701,如有侵权,请分割删除。