2012-09-04 30 views
4

我使用XStream作爲我的序列化對象的應用程序的一部分。對於其中一個用例,我必須序列化一些實現Externalizable接口的對象。對於我的用例,我想使用本地Java序列化對它們進行序列化。使用XStream的Externalizable類的默認Java序列化

我在互聯網上找到了一個鏈接,http://old.nabble.com/How-to-remove-Externalizable-Converter-td22747484.html,它幫助我解決了這個問題,並開始使用Reflection Converter作爲Externalizable對象。

在測試應用程序時,我發現應用程序在高併發訪問期間花費了很多時間(10秒)到轉換器代碼中。我可以看到問題出現在FieldDictionary的buildMap方法中。

我想知道是否有更好的方法來解決我的原始問題?具有高度併發環境時,Reflection Converter的性能是否會很差?

給出一些額外的環境背景。它是一個Web應用程序,序列化在請求處理過程中發生,應用程序可以有100個併發線程。

我真的很感激任何關於此的幫助/建議。

+1

XStream團隊修復了代碼。修正涉及移動一些代碼以使緩存的元素不同步塊。 [JIRA案件](https://jira.codehaus.org/browse/XSTR-705) – SKP

回答

0

這在技術上不是答案..但我希望它有助於反正。

在創建用於生物分子研究建模的基於Java Swing的桌面應用程序時,出於性能原因,我們將非常複雜且互連的對象圖序列化到磁盤。

即使通過Externalization和Serializable相關的問題,我們不得不放棄整個方法並開始新鮮事,因爲Java序列化對對象結構/名稱等非常敏感。這意味着模型的無辜重構導致當用戶嘗試加載舊的序列化模型時,在生產中發生重大崩潰。我們最終創建了一個友好的數據存儲對象結構(對圖中其他節點沒有強相互引用),並對此結構進行了序列化。這比原始圖的序列化和反序列化要簡單得多,不易出錯並且快得多。這也意味着只要適配器(將Domain對象轉換爲DataStore對象的組件)保持適當更新,我們就可以隨意重構/修改我們的域圖對象。