我有一个复杂的对象,带有字段和引用数据库,我想作为序列化对象传递。我实现了该接口,但另一方面它不能解决问题,并且出现意想不到的错误。如何自定义复杂对象的序列化?
我想做的是在序列化之前告诉我只有序列化的ID,并且在反序列化之后找回ID并且更容易地重建项目。
为了帮助一个代码,我有
setId();
getId();
and Load() methods
我想通过对象内部完成。
这怎么办?
我有一个复杂的对象,带有字段和引用数据库,我想作为序列化对象传递。我实现了该接口,但另一方面它不能解决问题,并且出现意想不到的错误。如何自定义复杂对象的序列化?
我想做的是在序列化之前告诉我只有序列化的ID,并且在反序列化之后找回ID并且更容易地重建项目。
为了帮助一个代码,我有
setId();
getId();
and Load() methods
我想通过对象内部完成。
这怎么办?
是没有意义的serialize数据库国土资源所以你要设置你的非序列化字段作为transient
然后在readObject
方法解决这些问题。例如: -
private int id;
private transient java.sql.Connection connection;
private void readObject(ObjectOutputStream out) throws IOException {
out.defaultReadObject();
connection = DriverManager.getConnection();
}
这里的id字段将在defaultReadObject()反序列化,但如果你想有一个数据库资源,你将不得不管理的是自己作为像这样的瞬时数据不能JVM之间转移。
看看有关Java(Joshua Bloch)讨论序列化的项目54,55,56和57。总结
最后,仔细阅读javadoc的Serializable和Effective Java的54-57项。它也会回答你的其他问题。
干杯
请问你是否愿意帮我解决一些问题。这是我做序列化的第一个任务。 – Pentium10 2010-06-29 09:18:26
只需看一下'Serializable'的JavaDoc。 – musiKk 2010-06-29 09:20:09
另一个问题。我有一个3级继承,abstract-> first imp-> second implementation。第二个是仅可序列化的,但数据库是抽象定义的。我是否必须在抽象和一级实施中将所有字段标记为暂时的? – Pentium10 2010-06-29 09:21:22