什么使对象可序列化

时间:2017-08-25 14:34:16

标签: java file serialization

我有一个带有HashMap字段的对象以及我尝试序列化的一些方法。但是,在运行时,我得到java.io.NotSerializableException

我正在检查HashMaps是否可以被序列化,而且我已经阅读了它们,所以我不确定问题是什么。

我只是想知道是什么让一个对象能够被序列化,为什么这个对象似乎只有可以序列化的字段也不能。

1 个答案:

答案 0 :(得分:1)

这是在Java平台规范中定义的:

https://docs.oracle.com/javase/7/docs/platform/serialization/spec/serial-arch.html

基本规则如下:

" Serializable类必须执行以下操作:

  • 实现java.io.Serializable接口

  • 标识应该可序列化的字段(使用 serialPersistentFields成员显式声明它们可序列化 或使用transient关键字表示不可序列化的

  • 可以访问其第一个非可序列化的no-arg构造函数 超"

从广义上讲,在没有任何相反的迹象的情况下,以及未明确标记的字段"瞬态"是序列化的候选者。

目标对象向下的整个对象图必须是可序列化的,或者什么都不是。也就是说,引用对象(不是基元)的每个字段都必须引用可序列化对象。