1

线程中发布了许多非常有用的答案帮助解决了我关于序列化的问题。从回复中我了解到,这只是在 jvm 中持久化和重新创建数据的一种方式。因此,序列化用于从字节流重新创建 java 对象。然而,数据可以通过 XML/JSON 或任何其他数据格式传输。那么这可以称为序列化吗?我假设不同之处在于相关的java库将根据传递的数据格式使用字节流/xml数据/json数据等重新创建对象。在 2 个基于 java 的系统之间进行通信的情况下,我认为 bytestream 将很有用,而在使用不同技术工作的 2 个系统之间进行通信的情况下,将使用其他标准数据格式。在 EJB/Java RMI 的情况下,我假设在客户端和服务器之间传输的对象必须被序列化,因为我假设 java 将使用标准序列化 API 来反序列化对象。上面列出的所有这些都正确吗?

4

1 回答 1

1

维基总结的很好,

In computer science, in the context of data storage and transmission, 
serialization is the process of translating data structures or 
object state into a format that can be stored

所以你的第一个问题

然而,数据可以通过 XML/JSON 或任何其他数据格式传输。那么这可以称为序列化吗?

是的,一点没错。任何你喜欢的格式,只要它能够被存储。

问题二:

在 2 个基于 java 的系统之间进行通信的情况下,我认为 bytestream 将很有用,而在使用不同技术工作的 2 个系统之间进行通信的情况下,将使用其他标准数据格式。

实际上,Java 的内置序列化往往仅在用户基本上不可见且速度无关紧要时才使用。例如,一些分布式产品可能使用 java 序列化将对象从一个节点发送到另一个节点。对于任何类型的 Web 服务,即使是从一个 JVM 支持的服务到另一个,像 JSON 或 XML 这样的友好格式更为常见。对于速度很重要或负载大小必须尽可能小的任何产品,它们不会使用 java 的序列化,但可能会使用一些优先级二进制格式。

protobufavrothrift等协议旨在尝试为您提供两全其美的体验。它们有些流行,但远非普遍。

您可能还会听到编组这个术语,例如编组器或编组对象。它们基本上意味着同样的事情,尽管在 Java 领域中,当您谈论非二进制格式时更常见的是编组,而当您谈论二进制格式时则更常见的是序列化。

于 2013-09-29T17:08:36.000 回答