2012-02-27 51 views
1

我想通過客戶端到服務器的套接字發送一些對象。我可以序列化它們像對象或轉換爲XML。哪種方法需要更少的內存?Java中的序列化對象

+0

服務器是否可以反序列化Java對象? – 2012-02-27 14:49:59

+0

是的..我只想選擇最好的方法,不要花費太多的內存 – 2012-02-27 14:51:39

+0

你想保護DoS嗎? – 2012-02-27 14:52:29

回答

3

序列化它們將佔用更少的空間。您還可以嘗試kryo爲您的序列化對象獲得更好的大小。它支持Deflate壓縮/解壓縮。但請注意,它是非標準的,因此套接字的另一面也必須使用該庫以反序列化。

3

自然而然地序列化需要很少的內存轉換爲XML ......想想所有那些<...></...>標籤!序列化將使用數字來處理所有數據,而不是ASCII字符。

另外,你可以序列化xmlhttp://x-stream.github.io/

1

轉換爲XML佔用更多的空間,客戶端和服務器的不僅僅是送他們上連載,因爲你基本上覆制內容到一個新的變量。發送它們的序列化可能不會使用數據包的全部容量,但是您始終可以處理第一個數據包並使用下一個數據包覆蓋它以節省一些空間(至少這是我目前的做法)。

但是,序列化它可能會使傳輸速度變慢,因爲您必須發送多個包。另一方面,如果你把所有東西都放到一個XML中,你可能會遇到包的大小限制

(我在說的DatagramSocketDatagramPacket在這裏,因爲這些是我使用的,我不知道如何情況與其他轉移方式一樣)。

1

XML vs Java Serialization,可以使用更多帶寬,但使用的主要內存將是您的對象。如果你擔心使用的內存,我會讓你的對象結構更有效率(假設它是一個真正的問題)

當你序列化/反序列化,你可以流XML和Java對象,這就是爲什麼他們不應該使用大量內存。

顯然,如果你在發送前建立自己的序列化的數據,這將是低效的。