首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Externalizable与系列化有什么不同?

Externalizable与系列化有什么不同?
EN

Stack Overflow用户
提问于 2013-08-27 18:44:37
回答 2查看 5.3K关注 0票数 5

我读到了

Externalizable为我们提供了writeExternal()和readExternal()方法,这为我们提供了控制java序列化机制的灵活性,而不是依赖于Java的默认序列化。

但是,如果我实现了可序列化和覆盖readObject(), writeObject(),,那么它是否也意味着我正在自定义序列化过程?

它有何不同?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-27 18:51:18

可外可和系列化的区别

  1. 在可序列化的情况下,将使用默认的序列化过程。在可扩展的情况下,使用自定义序列化过程,这是由应用程序实现的。
  2. JVM调用readExternel()和writeExternal()的java.io.Externalizalbe接口,以便将对象恢复并写入持久性。
  3. Externalizable接口为应用程序提供对序列化过程的完全控制。
  4. readExternal()和writeExternal()取代了writeObject和readObject方法的任何具体实现。

虽然Externalizable提供了完整的控制,但在Java中出现瞬态变量和静态变量的情况下,序列化超级类型状态和处理默认值也带来了挑战。如果正确使用,可扩展接口可以提高序列化过程的性能。

所以请使用Externalizable接口

当您对对象的序列化有特殊要求时。例如,您可能有对象的一些安全敏感部分,如密码,您不希望保存这些部分并将其传输到某个地方。或者,从主对象中保存引用的特定对象可能毫无价值,因为它的值在还原后将变得毫无价值。

票数 5
EN

Stack Overflow用户

发布于 2013-08-27 18:51:50

http://docs.oracle.com/javase/tutorial/javabeans/advanced/persistence.html

当您需要序列化默认序列化无法处理的对象时,或者当您需要向不是对象数据成员的序列化流中添加数据时,需要对序列化的对象进行更大的控制,则实现writeObject。实现readObject来重构您用writeObject编写的数据流。 当您需要完全控制bean的序列化时(例如,在写入和读取特定的文件格式时),请使用Externalizable接口。要使用可扩展的接口,您需要实现两个方法: readExternal和writeExternal。实现Externalizable的类必须具有无参数构造函数。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18473158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档