Parcelable vs Serializable

*爱你&永不变心* 提交于 2020-10-30 01:40:26

最近看到一句英文,分享给大家

 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源创计划”,欢迎正在阅读的你也加入,一起分享。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!