2011-07-21 26 views
0

在不生成/創建太多不可變對象的情況下將XML寫入OutputStream(TCP Socket)的最佳方式是什麼?使用Java中的可變對象將XML數據寫入OutputStream

所以我有我的數據在一個ConcurrentHashMap。我想循環這些數據,創建一個自定義XML,然後將XML寫入OutputStream。這個過程是重複的,所以我不想在轉換/寫入過程中產生太多的對象,所以GC沒有太多的負載。

我一直在尋找JAXB和XStream,使地圖到XML轉換更容易,但它看起來像在XStream中的JAXB和轉換器方法中的XMLAdapter,我將最終得到轉換過程中創建的對象。

我也願意推出自己的產品。我想要一個解決方案,最終重用可變對象。

我可以使用StringBuffer並使用append方法連接所有內容(XML標記和我的數據),然後執行myst​​ringBuffer.toString()。getBytes()並將bytearray寫入輸出流。在這種方法中,我可以重用StringBuffer和ByteBuffer。每次只有字節數組將成爲一個新對象。

還有其他方法嗎?

看來我正在超越自我,假設內存/ GC可能有問題 - 我可能完全錯誤,僅僅使用JAXB或XStream就可能是解決方案。然後我可以做一些性能測試來找出瓶頸。

感謝

+1

爲什麼他們是不可變的?你是在一個線程或什麼東西? – Heckman

+5

我不認爲你給垃圾收集器足夠的功勞 - 它非常擅長處理大量短暫的對象。除非您看到實際的性能問題,否則不要擔心對象創建的開銷。這個問題聽起來像是過早優化的經典案例。 – skaffman

+0

@skaffman - 您應該將您的評論轉換爲答案。 – ziesemer

回答

1

與skaffman的意見達成一致:

我不認爲你給垃圾收集足夠的信用 - 這是 在處理大量短期對象的非常好。 除非您看到實際的 問題,否則不要擔心對象創建開銷。這個問題聽起來像過早優化的經典案例 。

所以,我也會做一些性能測試,看看是否還有一個需要關注的瓶頸。

(主要是發佈這個答案,企圖要麼得到這個問題的一些額外的關注/競爭力的答案,或者至少,簡單地從懸而未決的問題日益列表中刪除此。)

相關問題