我有一個應用程序以前通過序列化模型對象存儲了一些數據(QuickNote
)。然後通過反序列化加載。如何將對象反序列化爲具有相同名稱的新對象?
不過,我更新的應用程序來存儲XML數據,而不是和我需要能夠導入舊的,序列化對象的轉換。新對象不是實現Serializable
,雖然也有同名(QuickNote
)。
我試圖反序列化老QuickNote
和使用後續的代碼存儲到新的一個:
FileInputStream fileIn = new FileInputStream("data/quicknotes_user.dat");
ObjectInputStream in = new ObjectInputStream(fileIn);
List<OldQuickNote> newList = (List<OldQuickNote>) in.readObject();
由於舊序列化文件中的類名是QuickNote
,我得到的錯誤java.io.InvalidClassException: model.QuickNote; class invalid for deserialization
因新的班級具有相同的名稱並且不執行Serializable
。
有沒有辦法來反序列化這個QuickNote
對象爲OldQuickNote
對象?無論QuickNote
和OldQuickNote
是相同的,只是QuickNote
不再實行Serializable
但OldQuickNote
一樣。
我的確嘗試尋找答案,但說實話,我甚至不知道如何搜索這個,因爲當我選擇首先序列化QuickNote
對象時,我顯然做出了糟糕的設計決定。
注意事項:
- 我不能序列化對象改變對象類型(類名),因爲它是目前駐留在用戶的系統中。
- 新
QuickNote
對象不能改變,以實現Serializable
,因爲它的註解和用於編組JAXB。
最簡單的(只有?)解決方案是讓它再次實現'Serializable'。 – Henry
我只是在我的問題中添加了一些警告。我不能用新對象實現'Serializable',因爲JAXB編組似乎不允許它使用'Serializable'對象。 – Zephyr
歡迎來到Java對象序列化的世界 - 這些問題是我一般不推薦使用Java對象序列化的原因。 – Robert