首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java:什么可以序列化,什么不可以序列化?

Java:什么可以序列化,什么不可以序列化?
EN

Stack Overflow用户
提问于 2013-05-31 14:32:55
回答 9查看 33.9K关注 0票数 31

如果Serializable接口只是一个用来传递java类的元数据的Marker-Interface,那我就有点困惑了:

在阅读了java的序列化算法(元数据从下到上,然后是实际的实例数据从上到下)的过程后,我真的不能理解无法通过该算法处理的数据。

简而言之,

  1. 什么数据可能导致NotSerializableException
  2. How我应该知道不应该为我的类添加implements Serializable子句?
EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2013-05-31 14:38:30

当您谈论NotSerializableException时,当您想序列化一个对象时抛出它,该对象没有被标记为Serializable -仅此而已,尽管当您扩展非序列化类并添加Serializable接口时,它完全没有问题。

没有不能序列化的数据。

票数 13
EN

Stack Overflow用户

发布于 2013-05-31 14:39:12

首先,如果您不打算序列化类的实例,则甚至不需要考虑序列化它。只实现你需要的东西,并且不要仅仅为了你的类而使你的类可序列化。

如果您的对象有一个对任何不可序列化对象的引用(可传递的或直接的),并且此引用没有用transient关键字标记,那么您的对象将是不可序列化的。

通常,序列化不能在以后或其他地方反序列化时重用的对象是没有意义的。这可能是因为对象的状态只在此时此地有意义(例如,如果它有一个对正在运行的线程的引用),或者因为它使用了一些资源,如套接字、数据库连接或类似的资源。很多对象并不表示数据,并且不应该是可序列化的。

票数 14
EN

Stack Overflow用户

发布于 2013-05-31 14:37:01

任何不是SerializableSerializable类都会抛出这个异常。您可以通过使用transient关键字来避免这种情况。

无法序列化的常见示例包括Swing组件和线程。如果你仔细想想,这是有意义的,因为你永远不可能反序列化它们,让它变得有意义。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16851070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档