18

由于我们可以通过覆盖 writeObject() 和 readObject() 来覆盖默认的序列化过程,那么 Externalizable 接口需要什么?

4

3 回答 3

5

类实现Serializable 可能希望也可能不希望更改该类的实例写入流的格式。

但是,类实现Externalizable 必须实现writeExternalreadExternal方法,并且类有责任将数据写入流/从流中恢复

于 2013-05-17T09:34:16.537 回答
4

这个问题在这里有一些合理的答案

“序列化 Java 对象的 CPU 成本可能很高。这种成本反过来会影响 JMS 对象消息。在某种程度上,您可以通过让应用程序对象实现 java.io.Externalizable 来抵消这种成本,但仍然会有很大的影响编组类描述符的开销。为了避免编写嵌入在 Object 消息中的附加对象的类描述符的成本,让这些对象实现 Externalizable,并直接在它们上调用 readExternal 和 writeExternal。例如,调用 obj.writeExternal( stream) 而不是 stream.writeObject(obj)。使用 Bytes 和 Stream 消息通常是首选做法。

这是我能找到的最佳理由(在 Oracle 文档中)在 WebLogic JMS 最佳实践文档中:

于 2018-07-24T10:12:50.857 回答
-1

可序列化接口是为了获得自动序列化功能而实现的,但如果您想提供自己的序列化逻辑(自定义逻辑),您会选择 Externalizable 接口。 Externalizable 接口包含两个必须实现的方法,即readExternal()writeExternal()

如果您实现 Serializable 接口,包括所有基类(超类)的状态在内的所有内容都由默认(自动)序列化过程处理。

于 2013-05-17T09:34:51.573 回答