2010-10-30 65 views
3

如果我想让我的应用中的所有对象都可序列化,为什么不能避免这种情况呢?为什么需要使用标记接口来序列化对象?

更新:我知道有些类不能序列像线程但Java系统知道还该线程不是序列化的,为什么没有自动管理呢?

我想知道,如果有一些根本性的原因。

+0

我已经编辑了某人的帮助较小回答的反应。请记住,有些程序员有很大的自我意识,所以忽略它们。它最好是降低或标志为冒犯并继续前进。 – Juliet 2010-11-01 14:13:38

回答

3

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

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

考虑,这没有任何意义连载所有的对象。

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

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

+0

是的,但java系统知道线程是不可序列化的,为什么不自动管理它? – user310291 2010-10-30 11:46:02

+0

我怎么会偶然序列化,因为我必须将方法写入我想要序列化的对象?我的意思是我必须两次做这个工作,这不符合KISS原则? – user310291 2010-10-30 11:47:12

+0

1)实际上,它没有。或者更确切地说,它只知道这个,因为Thread没有实现Serializable。 2)如果在某些情况下忘记了对象A可能包含对对象B的引用。 – 2010-10-30 11:48:07

1

如果您自己实现所有与序列化相关的代码,则不需要它,但只要使用标准库函数执行操作,就必须通过某种方式进行通信,即说明您的类已设计好并可以序列化。仅仅因为程序中的所有类都是可序列化的,并不意味着它们在其他程序中。

-1

因为这是语言设计的方式?像这样的问题从根本上说是毫无意义的。如果所有的类都是可序列化的,那将是可能的,而且确实更容易一些,但是并不是那样做的。有很多原因,为什么没有,并且他们在一些常见问题解答或高斯林采访中被提供,我在12年前阅读过。安全当然是其中之一。但在这个阶段,这真的是徒劳的讨论。

+0

并且这样的回答也没有意义。这种语言可能是以这种方式设计的,只是因为团队没有时间来整合这个版本或者基本原因。 – user310291 2010-10-31 10:48:25

+0

看来其他人想知道所以不要把你的意见理所当然。 – user310291 2010-10-31 10:53:45

+0

但是没有时间。这只是你的意见。为什么需要更多时间做更少的工作?这是一个深思熟虑的设计决定,它被记录在案。某处。但事实就是如此,就是这样。不只是'我的意见'。 – EJP 2010-11-01 00:45:35

相关问题