2012-02-27 88 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对象,这就是为什么他们不应该使用大量内存。

显然,如果你在发送前建立自己的序列化的数据,这将是低效的。