此thread中发布的一些非常有用的答案有助于清除序列化方面的问题。根据我的理解,它只是一种在jvm中持久化和重新创建数据的方法。所以序列化用于从字节流重新创建java对象。但是,数据可以通过XML / JSON或任何其他数据格式传输。这可以称为序列化吗?我假设不同之处在于相关的java库会根据传递的数据格式使用字节流/ xml数据/ json数据等重新创建对象。在两个基于java的系统之间进行通信的情况下,我假设字节流将是有用的,因为在使用不同技术的两个系统之间进行通信的情况下,将使用其他标准数据格式。在EJB / Java RMI的情况下,我假设必须序列化在客户端和服务器之间传输的对象,因为我假设java将使用标准序列化apis来反序列化对象。上面列出的所有这些都是正确的吗?
答案 0 :(得分:1)
Wiki总结得很好,
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或任何其他数据格式传输。那么它可以被称为序列化吗?
绝对是的。您喜欢的任何格式,只要它能够存储。
问题二:
如果在两个基于java的系统之间进行通信,我认为在使用不同技术的两个系统之间进行通信的情况下,字节流将非常有用。将使用其他标准数据格式。
实际上,Java内置的序列化往往只在用户基本上不可见且速度无关紧要时使用。例如,某些分布式产品可能使用java序列化将对象从一个节点发送到另一个节点。对于任何类型的Web服务,即使从JVM支持的服务到另一种服务,某些友好的格式(如JSON或XML)也更为常见。对于速度很重要或有效负载大小必须尽可能小的任何产品,它们不会使用java的序列化,但可能会使用某种优先级的二进制格式。
protobuf,avro和thrift这样的协议旨在尝试为您提供两全其美的优势。它们有点受欢迎但远非普遍。
您可能还会听到编组一词,如编组或编组对象。它们基本上意味着相同的东西,尽管在Java领域,当你谈论非二进制格式时,听到编组会更常见,而当它是二进制格式时会更频繁地进行编组。