我有一个复杂的对象,包含我希望作为序列化对象传递的字段和数据库引用。我实现了界面,但另一方面它没有用,并且出现意外错误。
我想要做的是,在序列化之前告诉只有ID被序列化,并且在反序列化之后返回ID并更容易地重建项目。
为了帮助代码,我有
setId();
getId();
and Load() methods
我想通过Object完成。
如何做到这一点?
答案 0 :(得分:4)
serialize数据库资源无意义,因此您需要将非序列化字段设置为transient
,然后在readObject
方法中解析它们。 e.g:
private int id;
private transient java.sql.Connection connection;
private void readObject(ObjectOutputStream out) throws IOException {
out.defaultReadObject();
connection = DriverManager.getConnection();
}
这里的id字段将在defaultReadObject()中反序列化,但是如果你想要一个数据库资源,你必须自己管理它,因为这样的瞬态数据不能在JVM之间传输。
答案 1 :(得分:2)
看一下有效Java(Joshua Bloch)讨论序列化的第54,55,56和57项。总结
最后,彻底阅读了Serializable的javadoc和Effective Java的54-57项。它也会回答你的其他问题。
干杯