可序列化对象中的所有类引用是否应实现Serializable?

时间:2015-08-04 17:56:58

标签: java android serialization

我试图通过实现Serializable对象来训练后保存神经网络,并且该类包含Layer和Node类引用。 我的问题是:我是否应该在这些(层,节点)两个类中实现Serializable,以便能够成功地保存和加载神经网络类的实例,尤其是{java.io.NotSerializableException}?< / p>

2 个答案:

答案 0 :(得分:7)

您打算使用序列化存储/加载的每个对象都必须实现Serializable。这包括您要序列化的对象内的所有成员字段。

唯一的例外是您认为在反序列化时需要存储以供以后使用的字段。您可以将这些字段标记为“瞬态”,例如

private transient int foo;

任何标记为transient的字段都不会存储为序列化对象的一部分,并且稍后反序列化的对象将设置为默认值(对于大多数基元为0,对于布尔值为false,对象为null)。

答案 1 :(得分:0)

如果您的对象没有实现java.io.Serializable,则此代码会抛出NotSerializableException,这同样适用于其所有非静态和非瞬态数据成员,依此类推,直到关闭。使用指定的SerialVersionUID更好,因此JVM不会在运行时计算它。您的类引用了另一个类,因此,您还需要对这些引用类实现serializable。

对于数组或集合,数组或集合的所有对象都必须是可序列化的。如果任何对象不可序列化,序列化将失败。

如果你的类中有内部类,那么内部类总是拥有对其外部类的隐式引用,除非外部类也可序列化,否则不能序列化内部类。实际上甚至不建议尝试;