jam*_*007 5 java serialization deserialization
我从这篇文章中了解到Serializable非常容易实现,并且可以灵活地进行更改(在大多数情况下,您要做的就是更新serialversionUID)。如果我们想控制读写过程,我们可以实现Externalizable。
如果只需要控制读写过程,就可以覆盖以下方法进行序列化,对吗?为什么我们需要引入新的接口Externalizable?
private void writeObject(java.io.ObjectOutputStream out)
throws IOException
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException;
private void readObjectNoData()
throws ObjectStreamException;
Run Code Online (Sandbox Code Playgroud)
你问:
为什么我们需要引入新的界面
Externalizable?
我能够找到的最佳理由(在 Oracle 文档中)位于WebLogic JMS 最佳实践文档(原始链接)中:
“序列化 Java 对象的 CPU 成本可能很高。这种成本反过来又会影响 JMS 对象消息。在某种程度上,您可以通过让应用程序对象实现 java.io.Externalizable 来抵消这种成本,但仍然会产生很大的成本。”编组类描述符的开销。为了避免编写嵌入在 Object 消息中的其他对象的类描述符的成本,请让这些对象实现Externalized,并直接对它们调用 readExternal 和 writeExternal 。例如,调用 obj.writeExternal( Stream) 而不是stream.writeObject(obj)。使用字节和流消息通常是首选做法。
简而言之,Externalizable至少在某些情况下,您可以使用 获得更好的性能。
“区别”在于,如果您使用Serializable序列化工作,通常会为您完成,但如果您使用序列化工作,则Externalizable需要您自己编写代码。
| 归档时间: |
|
| 查看次数: |
1445 次 |
| 最近记录: |