为什么需要使用标记接口来序列化对象?

时间:2010-10-30 10:35:40

标签: java

如果我希望我的应用中的所有对象都可以序列化,为什么不能避免这种情况?

更新:我知道有些类不能像线程那样被序列化,但是java系统还知道Thread也不可序列化,为什么不自动管理呢?

我想知道是否有一些基本原因。

3 个答案:

答案 0 :(得分:3)

  

如果我希望我的应用中的所有对象都可以序列化,为什么不能避免这种情况?

简单地说,因为这就是Java序列化的工作方式。

认为序列化所有对象没有意义。

  • Thread实例和大多数Stream类的实例包括无法序列化的临界状态。
  • 某些类依赖于类静态,而且它们没有序列化。
  • 某些类是不可序列化的,因为它们严重依赖于不可序列化的类。
  • 您根本不想或不需要序列化的某些课程。

因此,应用程序员应如何控制序列化的内容?他如何阻止各种不必要的东西被偶然序列化?答:通过声明他想要序列化的类来实现Serializable

答案 1 :(得分:1)

如果您自己实现所有与序列化相关的代码,则不需要它,但只要您使用标准库函数执行它,就必须有一些方法来表示您的类已经设计并准备好进行序列化。只是因为程序中的所有类都是可序列化的并不意味着它们在其他程序中。

答案 2 :(得分:-1)

因为这是语言设计的方式吗?这样的问题从根本上说是毫无意义的。将所有类都序列化是可能的,而且确实更容易,但是没有这样做。有很多原因可以解释,并且在12年前我读过的某些FAQ或Gosling访谈中给出了它们。安全肯定是其中之一。但在现阶段,这真的是徒劳的讨论。