Android面试专题(七):Serializable 和 Parcelable 的区别

1,040 阅读2分钟

不诗意的女程序媛不是好厨师~ 转载请注明出处,From李诗雨—blog.csdn.net/cjm24848365…

首先,我要强行加个图,哈哈哈哈哈~

在这里插入图片描述

面试官:"说一下Serializable接口和Parcelable接口的区别吧。"

我们可以从以下两方面来说一说~

首先我们先给两者来个简单的介绍:

1.定义

  • Serializable(Java自带):

    Serializable是序列化的意思,表示将一个对象转换成可存储或可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地。

  • Parcelable(android 专用):

    除了Serializable之外,使用Parcelable也可以实现相同的效果,

    不过不同于将对象进行序列化,Parcelable方式的实现原理是将一个完整的对象进行分解,

    而分解后的每一部分都是Intent所支持的数据类型,这样也就实现传递对象的功能了。

当然,光说这一点还是有点少,讲的不够深入不说,而且还达不到拖延时间的效果,所以我们还可以从下面这一点来接着唠:

2.选择序列化方法的原理:

既然二者都是用作序列化的,那我们该如何来选择呢?标准如下:

  • 内存中使用Parcelable

    原因解释: 内存中使用Parcelable性能比较高,主要原因是Parcelable是对一个对象进行分解,它分解后的每一部分内容,intent都是可以支持的。

    而Serilalizable更趋向于使用二进制的方式进行序列化的动作。

    并且Serializable在序列化的时候会产生大量的临时变量,进而会引起频繁GC的操作,

    所以我们在内存中,比如说从Activity A 传一个对象 给Activity B的过程中,如果使用Serilalizable,会有很多临时变量产生进而降低了性能。

    所以,在内存中,只要我们是进行对象的传输,我们就是用Parcelable。

  • 持久化使用Serializable

    原因解释: 在持久化的过程中Serializable占用的存储空间比Parcelable要小一些,因为它是直接转换成我们的二进制的形式。Serializable也不会因为对象的增减字段而造成反序列化的失败,所以在持久化的时候建议大家使用Serializable,并且它是存放在文件中的,占用的磁盘空间也更小一些。

积累点滴,做好自己~