我试图通过实现Serializable对象来训练后保存神经网络,并且该类包含Layer和Node类引用。 我的问题是:我是否应该在这些(层,节点)两个类中实现Serializable,以便能够成功地保存和加载神经网络类的实例,尤其是{java.io.NotSerializableException}?< / p>
答案 0 :(得分:7)
您打算使用序列化存储/加载的每个对象都必须实现Serializable
。这包括您要序列化的对象内的所有成员字段。
唯一的例外是您认为在反序列化时需要存储以供以后使用的字段。您可以将这些字段标记为“瞬态”,例如
private transient int foo;
任何标记为transient的字段都不会存储为序列化对象的一部分,并且稍后反序列化的对象将设置为默认值(对于大多数基元为0,对于布尔值为false,对象为null)。
答案 1 :(得分:0)
如果您的对象没有实现java.io.Serializable,则此代码会抛出NotSerializableException,这同样适用于其所有非静态和非瞬态数据成员,依此类推,直到关闭。使用指定的SerialVersionUID更好,因此JVM不会在运行时计算它。您的类引用了另一个类,因此,您还需要对这些引用类实现serializable。
对于数组或集合,数组或集合的所有对象都必须是可序列化的。如果任何对象不可序列化,序列化将失败。
如果你的类中有内部类,那么内部类总是拥有对其外部类的隐式引用,除非外部类也可序列化,否则不能序列化内部类。实际上甚至不建议尝试;