为什么Java.lang.Object不实现可序列化接口?

根据Java文档中的Serializability:

通过实现java.io.Serializable接口的类,可以启用类的可序列化性。未实现此接口的类将不会对其状态进行序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法或字段,仅用于标识可序列化的语义

为什么对象尚未实现Serializable?我们不希望可序列化的成员可以设为transient。为什么要阻止默认的Serializability?

回答:

可序列化类的所有子类型本身都是可序列化的。

换句话说:您曾经创建,曾经或将要创建的 类都可以序列化。transient仅排除字段,不包括整个类。

DataSource如果此特定DataSource实现的创建者忘记创建此类字段,则这是一个潜在的安全漏洞-

碰巧,您可以在内部使用数据库凭据进行序列化transient。序列化随机Java对象非常容易,例如通过内部类持有对外部的隐式引用this

使用您明确希望并允许进行序列化的类的白名单,这比使用仔细检查代码的安全性更高,以确保没有您不希望的字段被序列化。

而且,您不能再说:MySuperSecretClass不可序列化(通过简单地不实现Serializable)-您只能排除胆量(字段)。

以上是 为什么Java.lang.Object不实现可序列化接口? 的全部内容, 来源链接: utcz.com/qa/426791.html

回到顶部