为什么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