Java 实现可序列化的

Java 实现可序列化的,java,serialization,Java,Serialization,当我们用java开发一个类时,决定是否应该使该类可序列化通常很简单。如果类表示可以跨n/w传输的模型对象,则它应该是可序列化的。 这个推理正确吗? 如果是这样的话,某些本机Java API类可序列化而其他类不可序列化的背后的逻辑是什么? 从实现serializable的本机类列表中,似乎有不止一个原因需要实现serializable。 如有任何澄清,将不胜感激 如果该类表示可以跨 n/w,它应该是可序列化的。 这个推理正确吗 这个推理多少是正确的。如果您正在创建一个兼容性非常重要的公共API,

当我们用java开发一个类时,决定是否应该使该类可序列化通常很简单。如果类表示可以跨n/w传输的模型对象,则它应该是可序列化的。
这个推理正确吗?
如果是这样的话,某些本机Java API类可序列化而其他类不可序列化的背后的逻辑是什么?
从实现serializable的本机类列表中,似乎有不止一个原因需要实现serializable。

如有任何澄清,将不胜感激

如果该类表示可以跨 n/w,它应该是可序列化的。 这个推理正确吗

这个推理多少是正确的。如果您正在创建一个兼容性非常重要的公共API,那么您可能希望使类可序列化,这可能有一天需要序列化。但是,如果您正在创建一个私有应用程序,那么类应该仅在需要时才可序列化。试图避免实现
Serializable
的一个原因(在少数几个原因中)是,它引入了维护和保护新添加的可序列化类“接口”的需要:它的字节码表示

如果是这样的话,一些本机JavaAPI类背后的逻辑是什么 可序列化,而其他不可序列化?从本机类列表中 如果实现可系列化,那么似乎不止一个 实现可序列化的原因


Java API中许多类没有实现
Serializable
的主要原因之一是,由于接口和继承的性质,任何扩展实现
Serializable
的类的类都必须实现
Serializable
。例如,如果需要,则每个java类都需要设计为可正确序列化。这将给任何类的设计带来巨大负担:突然之间,需要考虑安全性、字节码有效性和兼容性。

何时实现可序列化的决定应该而不是

实现此接口将使类暴露于用于创建对象的语言外机制。为此,语言外是指Java语言中通常的构造函数机制之外的东西。这实际上是一件坏事,这意味着您可能需要重新定义反序列化对象上的所有类不变量,并强制执行实例控制(如果这样的系统已经就位)

它可以使您的类容易被腐蚀,并且容易受到安全黑客的攻击。它还可能危及封装/信息隐藏(因此,如果不经过深思熟虑,您将永远被绑定到特定的实现)


实现Serializable应该是一个深思熟虑的、有意识的选择。。。然后,也只有这样,您才应该序列化对象的逻辑状态。所有其他字段都应标记为瞬态。

迟做总比不做好。