当前位置: 首页 > 面试题库 >

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

季俭
2023-03-14
问题内容

根据Java文档中的Serializability:

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

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


问题答案:

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

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

DataSource如果此特定DataSource实现的创建者忘记创建此类字段,则这是一个潜在的安全漏洞-
碰巧,您可以在内部使用数据库凭据进行序列化transient。序列化随机Java对象非常容易,例如通过内部类持有对外部的隐式引用this

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

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



 类似资料:
  • 问题内容: Java新手。在Android应用程序上工作时进行学习。我正在实现一个Comparator来对文件列表进行排序,而android docs 说一个Comparator应该实现Serializable: 建议比较器实现可序列化。 这是这里的Serializable接口。 我只想对文件列表进行排序。我为什么要实施此方法,或者为什么对任何比较器都应采用该方法? 问题答案: 这不仅是Andro

  • 如果接口只是一个标记接口,用于在 java 中传递有关类的某种元数据 - 我有点困惑: 在阅读了java的序列化算法(元数据从下到上,然后从上到下的实际实例数据)的过程之后,我无法真正理解哪些数据不能通过该算法进行处理。 简而言之: 哪些数据可能导致? 我怎么知道我不应该为我的类添加子句?

  • 问题内容: 如下代码: 引发以下异常: 我猜内部类具有一个允许对其私有访问的字段和方法的字段。声明内部类static 可以解决它,但是如果需要此访问权限怎么办?有没有一种方法可以在不包含封闭类的情况下序列化非静态内部类,例如通过引用外部类? 编辑:例如,仅在序列化之前才需要访问外部类。好的,编译器不知道这一点,但是我认为这就是关键字存在的原因。 问题答案: 如果InnerClass需要此访问权限怎

  • 在我的代码中,我有以下行: 在野外,它生活在一个枚举中: 我从sonarqube那里得到以下提及: 使“形状”暂时或可序列化。可序列化类中的字段本身必须是可序列化的或瞬态的,即使该类从未显式序列化或反序列化。这是因为在负载下,大多数J2EE应用程序框架都会将对象刷新到磁盘,而一个据称具有非瞬态、非序列化数据成员的可序列化对象可能会导致程序崩溃,并为攻击者打开大门。 据我所知,int[](和int[

  • 如果一封邮件被发送到我的收件箱,我会收到一条消息,并将内容插入数据库。我有一个组织。springframework。整合。果心信息如下: 现在,如果出现故障,我希望有故障安全恢复机制,我想的是将消息对象序列化到一个文件中,然后反序列化并更新到DB。 问题1。在这种情况下,如何序列化消息对象?2。除了序列化,还可以使用其他机制吗? 编辑我以前没有做过序列化,我听说类应该实现Serializable,

  • 我试图在Java中序列化,但在运行我的程序时,我收到一个。 查看类,我注意到它没有实现。 为什么不实现?