最近看到一句英文,分享给大家
Apologizing does not always mean you are wrong & the other person is right. It just means you value your relationship more than your ego.
道歉并不总是代表我承认自己错了,只能说,我在乎我们的关系,比我自身还在乎 .
JAVA 中的序列化对象用Serializable,Android 除了Serializable之外,添加了Parcelable用于序列化。为什么Android新增Parcelable?
这要从Serializable开始说起。
一:Serializable使用起来非常简单
public class StudtySerializable implements Serializable{
private static final long serialVersionUID = -1827934265696732992L;
}
在使用Serializable序列化对象的时候,只需要实现Serializable接口就可以了,非常的简单。
扩展阅读:
(1)Serializable 是一个不包含任何方法的接口类,标记了实现该接口的类可以序列化和反序列化。
public interface Serializable {
}
(2)serialVersionUID 的工作机制
serialVersionUID 的工作机制:序列化对象的时候,系统会把当前类的serialVersionUID写入序列化文件。当反序列化的时候,系统会校验文件中的serialVersionUID与当前类的serialVersionUID的值是否一致。如果一致,说明当前类和序列化文件所用类的版本是相同的。这个时候可以反序列化成功。否则,说明当前类发上了某些变化。
指定有两种方式。默认/手动指定。
默认:如果用户不指定,序列化对象的时候,serialVersionUID的值等于当前类结构的哈希值。
手动:我们也可以手动指定,手动指定的好处是可以最大程度的反序列化。前提是只是删除或添加了某些字段。如果变量类型发生了变化,反序列化会失败。
二:Parcelable
Parcelable 要实现Parcelable接口,包含三个实现,分别是序列化、反序列化和描述。如下:
public class StudentParceable implements Parcelable {
protected StudentParceable(Parcel in) {
}
@Override
public void writeToParcel(Parcel dest, int flags) {
}
@Override
public int describeContents() {
return 0;
}
public static final Creator<StudentParceable> CREATOR = new Creator<StudentParceable>() {
@Override
public StudentParceable createFromParcel(Parcel in) {
return new StudentParceable(in);
}
@Override
public StudentParceable[] newArray(int size) {
return new StudentParceable[size];
}
};
}
三:Parcelable vs Serializable的区别
(1)Serializable 比 Parcelable实现起来比较简单。
(2)Parcelable 比 Serializable效率高(据说有约10倍的差距),Serializable的问题在于使用了反射,这是一个缓慢的过程。
(3)这种机制也倾向于创建大量的临时对象并导致相当多的垃圾收集。
四:使用
内存序列化选择Parcelable,存储到设备或者网络传输上选择Serializable或Parcelable。尽量在使用Serializable上保持最低限度。
If you are trying to pass a list with thousands of serialized objects, it is possible that the whole process will take more than a second. It can make transitions or rotation from portrait to landscape feel very sluggish.(Philippe Breault)
五:送上一首歌
本文分享自微信公众号 - 码农搬砖(manongbanzhuan)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
来源:oschina
链接:https://my.oschina.net/u/4684182/blog/4675376