Serializable 是如何工作的,为啥使用起来比 Parcelable 慢? [复制]
Posted
技术标签:
【中文标题】Serializable 是如何工作的,为啥使用起来比 Parcelable 慢? [复制]【英文标题】:How does Serializable work and WHY is it slower to use than Parcelable? [duplicate]Serializable 是如何工作的,为什么使用起来比 Parcelable 慢? [复制] 【发布时间】:2014-03-13 13:49:00 【问题描述】:为什么总是建议使用Parcelable
而不是Serializable
,在什么情况下使用后者更好?
【问题讨论】:
【参考方案1】:我认为Parcelable
与JAVA 1.1 中引入的Externalizable
相同。因此,如何序列化对象是众所周知的方法。
What is the difference between Serializable and Externalizable in Java?
一般来说,Serializable
的缺点是性能和性能。正如链接中的答案所述。您可以使用速度更快的第 3 方实现。但它永远不会像外部化那么快。
Externalizable
或 Parcerable
从显式定义中利用如何 load
和 store
您的对象。问题是您应该维护一个对象版本,以了解使用什么逻辑来序列化或反序列化您的对象。向后兼容性可能存在问题,并且这种编程工作要慢得多(正确的:))方式。但是当我们开始运行时,这种方法要快得多。
【讨论】:
不需要外部化。手动序列化只能使用 Serializable 完成。底线是 Serializable 在 android 上实际上要快得多,但前提是您使用 readObject() / writeObject()。所以不需要使用像 Parcelable 这样的专有 API,它甚至比旧的 Serializable 还要慢。【参考方案2】:Java Serializable:- Serializable 来自标准 Java,实现起来要容易得多,您需要做的就是实现 Serializable 接口并添加覆盖两个方法。 Serializable 的问题在于它试图适当地处理阳光下的一切,并使用大量反射来确定正在序列化的类型。所以它变成了一个强大的对象。
Androids Parcelable:- Android 进程间通信 (AIPC) 文件告诉 Android 应该如何编组和解组您的对象。它不那么通用并且不使用反射,因此它应该有更少的开销并且更快
【讨论】:
以上是关于Serializable 是如何工作的,为啥使用起来比 Parcelable 慢? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
为啥在 JDK 类中使用完全限定名称声明 Serializable?
为啥当我使用hibernate时这个类应该实现java.io.Serializable?