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
方法,这不是更合适的实现吗?