Java 为什么ObjectOutputStream.writeObject不接受序列化?

Java 为什么ObjectOutputStream.writeObject不接受序列化?,java,serialization,marker-interfaces,Java,Serialization,Marker Interfaces,为什么不采取行动?为什么它要使用对象?这是因为ObjectOutputStream中的writeObject覆盖不要求对象可序列化 ObjectOutput接口指定允许将对象写入流或底层存储的方法,但这可以通过序列化以外的进程实现。ObjectOutputStream实现此功能,但需要可序列化的对象。但是,它不能修改它实现的接口的签名。它应该是ObjectOutputStream.writeObject(可序列化),而不是ObjectOutputStream。writeObject(对象)。这是

为什么不采取行动?为什么它要使用
对象

这是因为
ObjectOutputStream
中的
writeObject
覆盖不要求对象可序列化


ObjectOutput
接口指定允许将对象写入流或底层存储的方法,但这可以通过序列化以外的进程实现。
ObjectOutputStream
实现此功能,但需要可序列化的对象。但是,它不能修改它实现的接口的签名。

它应该是
ObjectOutputStream.writeObject(可序列化)
,而不是
ObjectOutputStream。writeObject(对象)
。这是一个适当的用例,其中像
Serializable
这样的标记接口应该被使用,但不幸的是没有被使用。如果对象没有实现
Serializable
接口,这将使编译时类型检查的真正好处成为可能,而不是在运行时失败

我想借此机会提及他在书中提到的内容:

标记接口是不包含任何方法的接口 声明,但仅指定(或“标记”)一个 将接口实现为具有某些属性。例如 考虑可串行化的接口。通过实现此接口 类指示其实例可以写入
ObjectOutputStream
(或“序列化”)

对于
Serializable
标记接口,
ObjectOutputStream.write(Object)
方法将在其参数不存在时失败 实现接口。令人费解的是,这本书的作者
ObjectOutputStream
API没有利用
Serializable
接口声明写入方法。方法的参数类型 应该是
可序列化的
,而不是
对象
。目前,一个 尝试调用
ObjectOutputStream。在未调用的对象上写入

实现可序列化的
只会在运行时失败,但它没有 那样的话


@Joachim除了同步之外,还有什么进程允许将对象写入流?请参阅我上面的评论。你能给我点光吗?@极客:什么都行,真的。例如,可以使用JAXB。如果为ObjectOutputStream编写一个
writeSerializable
方法,该方法采用
Serializable
而不是
Object
,然后调用
writeObject
方法,这不是更合适的实现吗?