我有一個複雜的對象,帶有字段和引用數據庫,我想作爲序列化對象傳遞。我實現了該接口,但另一方面它不能解決問題,並且出現意想不到的錯誤。如何自定義複雜對象的序列化?
我想做的是在序列化之前告訴我只有序列化的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