Java Serialization vs JSON vs XML

时间:2012-06-19 14:01:45

标签: java json serialization xml-serialization data-serialization

我想知道在处理通过网络传输对象时我们应该选择什么序列化机制。有什么优点和缺点?

我知道大部分时间我们都会JSONXML使用AJAX,因为传输格式几乎是Javascript格式,加JSON是相当轻巧,占用空间小,因此Java序列化完全不在表格之内?

5 个答案:

答案 0 :(得分:19)

一般来说,重要的问题是哪个客户端将接收序列化对象 - 浏览器/ JavaScript引擎,如(node-js),Java客户端,未知/多个客户端。

JSON - JSON语法基本上是JavaScript,因此任何带有JS引擎的组件都能很好地处理它的解析 - 即使是复杂的数据结构也会有效地转换为“活”对象。 JSON解析器几乎适用于任何语言,即使不使用JS引擎也很容易使用(例如,以Google Gson为例,它可以轻松地将JSON转换为相应的对象),这使得它成为跨语言交流的理想选择。 - 例如在messaging architecture

XML - 分享JSON的许多好处 - 跨语言,轻量级等。例如,Adobe Flex处理XML非常好,甚至比JSON更好。它绝对是JSON的合适替代品。我个人更喜欢JSON的JS语法,但XML也很好。

Java序列化 - 应该只考虑Java到Java的通信。一个重要的注意事项是类定义应该在发送端和接收端,并且通常通过传递整个对象不会获得太多。我不排除RMI作为通信协议,它确实简化了开发。然而,由此产生的应用程序组件将是硬连接的,这将使其更换非常困难。

还有一个注意事项 - 序列化通常有其开销。但是,当通过网络进行通信时,瓶颈通常是网络而不是序列化/反序列化本身。

答案 1 :(得分:6)

我认为这取决于。如果您正在发送http请求或其他内容,那么JSON或XML显然是一个不错的选择。如果您只是通过tcp套接字发送一个java对象用于某些分布式算法或其他东西,我认为java序列化更容易/更好

答案 2 :(得分:4)

虽然通过网络进行序列化,但xml和json都能正常工作。这取决于消费者的这些信息。

  • 如果消费者是使用Ajax请求某些信息并在屏幕上呈现内容的浏览器,通常jason是最好的选择,因为它已经是Javascript对象格式,并且没有转换为Javascript兼容对象的开销。事实上,许多Ajax库(例如jQuery)都对json有很好的支持。

  • 如果您是使用者是另一个可能在或不在java中的应用程序,那么xml是首选的序列化机制。 Web服务非常重要地使用xml。

  • 如果你的消费者是另一个Java程序,那么肯定是java序列化是首选选项(例如RMI)。所以它尚未出来:-)。

但是,XML和Json之间存在模糊界限。我在这里提到的是一般做法。这是nice article将所有方面都放在xml vs jason上。

答案 3 :(得分:1)

我认为作为开发人员,我们不需要处理响应对象的序列化。但是如果我们考虑使用JSON,它就可以选择优于XML。

  1. 与XML不同,JSON响应不需要编码响应。
  2. 与XML相比,处理和处理JSON的速度更快,因为它没有被解析。
  3. AJAX的XML响应总是被编码,因此处理需要时间。
  4. JSON最适合Jquery用于UI相关编码,速度更快。
  5. 处理大量数据例如:从服务器获取索引数据,JSON处理速度更快。

答案 4 :(得分:1)

我曾经参加过安全工程师培训,不建议使用Java本机序列化,因为Java本机反序列化方面存在一些安全漏洞,可以接受任何(可能注入的恶意)字节流。当未正确定义定义/模式时,XML也存在一个已知的安全问题,称为XXE(XML外部实体)。可能会在消费方造成“十亿笑”攻击。