我的組織使用自定義序列化技術,我們使用輸出流迭代地存儲對象。我遇到以下問題:保持向後兼容性的多繼承序列化
Parent
和Child
類實現Serializable
。 Parent
班有字段a,b,c
和Child
班有e
。我將字段d
添加到Parent
並更新了父級的序列化,現在我們的舊客戶端無法正確讀取Child
序列化代碼。這是因爲Child
序列碼雲:
OutputStream in = getCurrentOutStream();
current_serialization_num = readVersionNum(in) // The version num is similar to Java's UID and is updated when fields are added.
readParent(in)
e = readField(in)
由於序列化是通過DataOutputStream
完成,良好的XML閱讀器不能照顧這。我對這個問題有一個醜陋的解決方案,但是它不會很好地延伸,所以我不想通過介紹它來污染讀者的思想。不過,我真的很想聽聽其他人會如何處理類似的情況。
您是否維護一個串行版本並在進行更改時進行更新? – 2012-07-20 19:23:09
是的,序列版本已更新,但客戶端的工具未更新。所以,它期望讀取Field e,但是它接收包含d的字節流,然後e。 – Sal 2012-07-20 19:28:14