我的程序中的一個類有一個LinkedList,它通常包含大量的元素。在序列化這個類時,發生了一個Stackoverflow錯誤。我明白這是由於序列化列表中的鏈接的遞歸方式。所以我想重寫這個列表的writeObject以迭代的方式,但我不知道如何做到這一點。如何序列化沒有stackoverflow錯誤的大型列表?
回答
如果要素之一是具有參考MYOBJECT例如你的對象爲MyObject:
public class MyObject implements Serializable {
private MyObject nextObject;
public void setNextObject(MyObject nextObject) {
this.nextObject = nextObject;
...
}
如果每個MyObject來鏈接到下/上一myObject的序列化進程將: 開始寫第一MyObject來之前它完成編寫第一個它將開始寫第二個MyObject等等,直到最後一個對象。
此結構可能導致大量元素的序列化stackoverflow異常。
解決方法是保存下一個對象的唯一標識爲:private int nextObjectId;
很好的解釋,謝謝。 – user3025839
我可以進一步問,在這種情況下你會如何重寫writeObject函數? – user3025839
我有類似的問題,我切換到保存在MyObject int nextObjectId。只需保存下一個對象的鍵而不是整個對象 – user7294900
- 1. 列表中找到()StackOverflow的錯誤
- 2. 反序列化通用列表時的反序列化錯誤
- 3. 沒有表格序列化?
- 4. 序列化錯誤:有反映類型的錯誤
- 5. JSON反序列化Java中沒有類型信息的列表
- 6. JSON列表反序列化錯誤
- 7. 對象列表序列化xml錯誤
- 8. WCF列表<string >序列化/反序列化錯誤
- 9. XML序列化類型的錯誤
- 10. bool類型的xml序列化錯誤
- 11. Json.Net - 如何序列化沒有外括號的C#列表?
- 12. PHP序列化/反序列化錯誤
- 13. jQuery序列化序列化URL錯誤
- 14. 反序列化JSON - 錯誤類型
- 15. 序列化和反序列化大元素的列表逐一
- 16. Footable錯誤:錯誤:沒有列提供的,沒有顯示錶
- 17. 序列化類型化數據集,更新程序集,反序列化錯誤
- 18. 列表的XML序列化過大
- 19. 如何解決反序列化()錯誤
- 20. jQuery的序列化錯誤
- 21. Akka的序列化錯誤
- 22. 有沒有任何優化的方式來渲染Android中的大型列表?
- 23. 如何序列化對象沒有json.net
- 24. 沒有Boost.Serialization的序列化
- 25. py-flask-jsontools如何序列化sqlalchemy模型或模型列表
- 26. 如何序列化/反序列化屬性的通用列表?
- 27. WCF CFClientBase序列化Stackoverflow異常?
- 28. 傑克遜序列化錯誤,當類有它的泛型
- 29. 如何序列化/反序列化具有公共根類的對象列表?
- 30. 類型錯誤的列表
可能重複https://stackoverflow.com/questions/12963445/serialization-readobject-writeobject-overrides – user7294900
ArrayList序列化,無遞歸。我猜想由於列表元素的結構,發生了飽和溢出。 – laune
我想你有你自己的列表實現,因爲LinkedList沒有這個問題。我建議你看一下LinkedList的源代碼,看看它們是如何實現的。 (或使用內置的LinkedList)我很驚訝有人知道如何編寫自定義序列化,但不知道如何在不遞歸的情況下遍歷鏈表。 –