Android -- 每日一问:Parcelable 和 Serializable 有什么用,它们有什么差别?

Posted Kevin-Dev

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android -- 每日一问:Parcelable 和 Serializable 有什么用,它们有什么差别?相关的知识,希望对你有一定的参考价值。

典型回答

Parcelable 和 Serializable 都可以实现序列化,使对象可以变为二进制流在内存中传输数据。在android 中,只要实现了二者之一的类就可以使用 Intent 和 Binder 来传递数据。实现了 Parcelable 接口的类依赖 Parcel 这个类来实现数据的传递,它并不是一个一般用途的序列化机制,主要是用于 IPC 机制的一个高性能传输。

差别:

  1. 从来源上看:Parcelable 是在Android中提供的序列化接口,Serializable 是 Java 提供的序列化接口。因此 Parcelable 只能在Android中使用,而 Serializable 可以在任何使用Java语言的地方上使用。

  2. 从使用上看:Parcelable 的使用比较麻烦,序列化过程需要实现Parcelable 的 writeParcelable() 方法和 describeContents() 方法,为了反序列化 ,还需要提供一个非空的叫做 CREATOR 的静态字段,该字段类型是实现了Parcelable.Cerator接口的类,一般用一个匿名内部类实现就可以了。现在也有一些插件可以方便的实现Parcelable 接口。
    Serializable 的使用比较简单,直接实现 Serializable 接口即可,该接口没有任何方法。序列化机制依赖于一个 long 类型的 serializaVersionUID,如果没有显式的指定,在序列化运行时会基于该类的结构自动计算一个值,如果类的结构发生了变化就会导致自动计算的 serializaVersionUID 不同。这样就会导致一个问题,序列化之后类如果新增了一个字段,反序列过程就会失败。
    注意:如果需要把对象持久化到存储设备或者通过网络传输到其它设备,最好使用 Serializable 。

  3. 从效率上看:Serializable 的序列化和反序列化都需要使用到 IO 操作,而Parcelable不需要IO操作,Parcelable的效率更高于 Serializable ,Android 中推荐使用 Parcelable。

你的朋友是不是也在准备面试呢?你可以“请朋友读”,把今天的题目分享给好友,或许你能帮到他。

以上是关于Android -- 每日一问:Parcelable 和 Serializable 有什么用,它们有什么差别?的主要内容,如果未能解决你的问题,请参考以下文章

Android -- 每日一问:能讲讲 Android 的 Handler 机制吗?

Android -- 每日一问:能讲讲 Android 的 Handler 机制吗?

Android -- 每日一问:两个 Fragment 之间如何进行通信 ?

Android -- 每日一问:介绍一下你经常浏览的 Android 技术网站

Android -- 每日一问:介绍一下你经常浏览的 Android 技术网站

Android -- 每日一问现在 Android 怎么学?学什么?