joy keeps flowin'

Serializable和Parcelable

xx

从开始学习Android,到现在看过很多次有人争论Android为什么用Parcelable,而不是Java提供的Serializable接口。

除了使用两者的方式不同外,国内(大陆)目前最普遍的观点是认为Serializable用了大量的反射,导致速度要比Parcelable慢。

但,真的是这样吗?

有许多人提出,是因为用到Serializable时,开发者并没有定义应该怎么序列化和反序列化,因此Java为你用反射完成的。实际上是可以实现Custom Serialization的。并没有提供给方法重写,如果想要这么做,你需要实现private的writeObject和readObject方法。你可以参考Discover the secrets of the Java Serialization API实现。

用这样的Serializable和Parcelable比较未免太不公平了。实际上,如果实现了Custom Serialization,它是要比Parcelable的写快大概3.6倍,比Parcelable的读取要快上1.6倍的。(速度未验证)。按照这个逻辑,Android中用Parcelable是有其他的原因。

StackOverFlow上的一个大牛解释,Parcelable除了可以实现进程间通信之外,还可以实现native和Java层的通信(Java层序列化后从native层读取出来)。

参考:

标签:
Categories: