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 方实现。但它永远不会像外部化那么快。

ExternalizableParcerable 从显式定义中利用如何 loadstore 您的对象。问题是您应该维护一个对象版本,以了解使用什么逻辑来序列化或反序列化您的对象。向后兼容性可能存在问题,并且这种编程工作要慢得多(正确的:))方式。但是当我们开始运行时,这种方法要快得多。

【讨论】:

不需要外部化。手动序列化只能使用 Serializable 完成。底线是 Serializable 在 android 上实际上要快得多,但前提是您使用 readObject() / writeObject()。所以不需要使用像 Parcelable 这样的专有 API,它甚至比旧的 Serializable 还要慢。【参考方案2】:

Java Serializable:- Serializable 来自标准 Java,实现起来要容易得多,您需要做的就是实现 Serializable 接口并添加覆盖两个方法。 Serializable 的问题在于它试图适当地处理阳光下的一切,并使用大量反射来确定正在序列化的类型。所以它变成了一个强大的对象。

Androids Parcelable:- Android 进程间通信 (AIPC) 文件告诉 Android 应该如何编组和解组您的对象。它不那么通用并且不使用反射,因此它应该有更少的开销并且更快

【讨论】:

以上是关于Serializable 是如何工作的,为啥使用起来比 Parcelable 慢? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 JDK 类中使用完全限定名称声明 Serializable?

为啥要实现Serializable

为啥当我使用hibernate时这个类应该实现java.io.Serializable?

为啥 scala.Serializable 没有指定任何方法?

为啥要实现Serializable

为啥此代码不起作用以及如何修复它?