Java 在哪个类/接口中声明了ReadObjectNodeData()、writeReplace()、readResolve()?

Java 在哪个类/接口中声明了ReadObjectNodeData()、writeReplace()、readResolve()?,java,java-io,Java,Java Io,在序列化/反序列化过程中,我们可以定义ReadObjectNodeData/WriterReplace/readResolve来自定义默认的序列化/反序列化行为 现在我的问题是,在哪里申报?与readUnshared/writeUnshared一样,它们在ObjectInputStream/ObjectOutputStream中声明/定义。它们没有在任何接口中声明:这是一个语言外约定。Serializable是一个标记接口,它通过Java序列化机制的契约绑定实现它的类。最好的做法是声明一个私有r

在序列化/反序列化过程中,我们可以定义ReadObjectNodeData/WriterReplace/readResolve来自定义默认的序列化/反序列化行为


现在我的问题是,在哪里申报?与readUnshared/writeUnshared一样,它们在ObjectInputStream/ObjectOutputStream中声明/定义。

它们没有在任何接口中声明:这是一个语言外约定。Serializable是一个标记接口,它通过Java序列化机制的契约绑定实现它的类。最好的做法是声明一个私有readResolve,这很明显,不可能有一个接口声明它。

它们不在任何接口中声明:这是一个语言外约定。Serializable是一个标记接口,它通过Java序列化机制的契约绑定实现它的类。最好的做法是声明一个私有的readResolve,这使得很明显不可能有一个接口来声明它。

序列化机制使用反射来调用这些字段。检测基于方法签名,这些没有接口。

序列化机制使用反射来调用这些字段。检测基于方法签名,没有用于这些签名的接口。

在ObjectStreamClass中,HasReadObjectNodeMethod/hasReadResolveMethod/hasWriteReplaceMethod是define,用于标识目标类是否定义ReadObjectNodeData/writeReplace/readResolve方法,如果是这样,则在ObjectInputStream/ObjectOutputStream中调用这些方法

ObjectInputStream.readSerialData。。。。 如果obj!=空&& slotDesc.HasReadObjectNodeMethod&& handles.lookupExceptionpassHandle==null { slotDesc.invokeradobjectnodataobj; }

ObjectStreamClass还声明以下字段私有方法ReadObjectNodeMethod;私有方法writereplacement;私有方法readresolve方法

在ObjectStreamClass中,HasReadObjectNodeMethod/hasReadResolveMethod/hasWriteReplaceMethod是define,用于标识目标类是否定义了ReadObjectNodeData/writeReplace/readResolve方法,如果是这样,则在ObjectInputStream/ObjectOutputStream中调用这些方法

ObjectInputStream.readSerialData。。。。 如果obj!=空&& slotDesc.HasReadObjectNodeMethod&& handles.lookupExceptionpassHandle==null { slotDesc.invokeradobjectnodataobj; }

ObjectStreamClass还声明以下字段私有方法ReadObjectNodeMethod;私有方法writereplacement;私有方法readresolve方法

谢谢你的回复。writeObject/readObject也标记为private,但它们是在ObjectOutputStream/ObjectInputStream中定义的。感谢您的回复。writeObject/readObject也标记为private,但它们是在ObjectOutputStream/ObjectInputStream中定义的。