我想通过套接字从客户端向服务器发送一些对象。我可以将它们序列化为对象或转换为xml。哪种方法占用的内存较少?
答案 0 :(得分:3)
序列化它们将占用更少的空间。您还可以尝试kryo为序列化对象获得更好的大小。它支持Deflate压缩/解压缩。但请注意,它是非标准的,因此套接字的另一端也必须使用该库来反序列化。
答案 1 :(得分:3)
自然序列化占用的内存少得多,转换为XML ...想想所有<...>
和</...>
标签!序列化会处理所有数字,而不是ASCII字符。
此外,您可以序列化到 xml ! http://x-stream.github.io/
答案 2 :(得分:1)
转换为XML在客户端和服务器上占用的空间比仅发送序列化的空间要多,因为基本上是将内容复制到新变量中。发送序列化可能不会使用数据包的全部容量,但您可以随时处理第一个数据包并用下一个数据包覆盖它以节省一些空间(至少我现在正在这样做)。
但是,序列化它可能会使传输速度变慢,因为您必须发送多个包。另一方面,如果将所有内容都放在一个XML中,则可能会遇到数据包的大小限制
(我在这里谈论DatagramSocket
和DatagramPacket
,因为这些是我使用的。我不知道其他传输方法的情况如何。)
答案 3 :(得分:1)
XML与Java序列化,可以使用更多带宽,但使用的主内存将是您的对象。如果您担心使用的内存,我会使您的对象结构更有效(假设这是一个真正的问题)
您可以在序列化/反序列化时传输XML和Java对象,这就是为什么它们不应该使用太多内存。
显然,如果在发送之前构建序列化数据,这将是低效的。