Mac*_*rse 16 java serializable
我一直在学习如何使用Serializable.
我知道如果我创建一个具有不同变量的类'A' Serializable并且我添加Serializable到我的类中,它也是Serializable.
但是,实际上是谁实现了这两种方法来序列化?是否Object需要处理所有事情或不同类别在必要时重载它们?
eri*_*son 15
序列化实际上是在java.io.ObjectOutputStream(和java.io.ObjectInputStream)及其一些辅助类中实现的.在许多情况下,这种内置支持就足够了,开发人员只需要实现标记接口Serializable.此接口称为"标记",因为它不声明任何方法,因此在实现类上不需要任何特殊的API.
如果需要,程序员可以使用自己的方法添加或替换默认序列化机制.例如,如果在反序列化对象后需要进行一些额外的初始化,则可以使用以下签名添加方法:
private void readObject(java.io.ObjectInputStream s)
throws java.io.IOException, java.lang.ClassNotFoundException
Run Code Online (Sandbox Code Playgroud)
要完全控制序列化和反序列化,请执行java.io.Externalizable而不是Serializable.
如果需要,Java序列化还有许多其他扩展点.该序列化规范是学习所有这些的权威性和完整的源代码.
我想你所谈论的方法是readObject()和writeObject().如果需要进行自定义序列化,则只需要实现这些,例如,当对象中的字段不可序列化时.如果只有可序列化的字段和基元,则不必实现自定义序列化方法.此外,您可以通过transient向其添加关键字来跳过序列化的某些字段.