2012-09-15 92 views
2

我正在調試和修復一個複雜的應用程序,它與一個巨大的Java對象(〜250M)一起工作。如何快速序列化/反序列化複雜的java對象

我用另一個程序創建了這個對象。目前我使用XStream從硬盤加載並保存這個對象,但解析它需要一分多鐘。 它減慢了開發過程。

JAXB更快嗎?有沒有其他的方法來加載和保存這個巨大的東西?

+0

你能使用二進制的格式?我不希望JAXB更快。 –

+0

我不在乎它是什麼格式...... –

回答

2

在這種情況下,我會序列化數據,這將使它更小,更快。您可以對關鍵類進行外部化,以進一步提高速度。這裏是我最近做的一些測試Protobuf vs Thrift vs Java Serialization它與kovica建議的基準相同,但是最近在更新的硬件/軟件上運行。

如果您需要加快速度,可以使用內存映射數據。這很難合作,但你無法擊敗表現。如果數據已經在磁盤緩存中,則可以加載250 MB爲幾十毫秒。如果不是,您將受到您的驅動器速度的限制,例如一個緩慢的40 MB/s驅動器將需要大約8秒。

我寫了一個庫使用內存映射文件被Java Chronicle

1

我會推薦Java serializa重刑給他人。它可以利用重用堆中的對象(例如:String的intern()方法),而不是創建新對象(與其他序列化器通常一樣)。這減少了有效載荷的總量。