在序列化中,将对象转换为字节流是什么意思?

In serialization, what is meant by turning an object into a stream of bytes?

对象不是已经存储为一堆字节了吗?序列化只是一种协议,在通过网络传输时强制对这些字节的组织方式进行某种排序吗?

从技术上讲,是的,计算机中的所有内容都表示为数据某处。所以任何内存中的对象都是 "a bunch of bytes".

但是,在实时应用程序中使用时,该对象的状态可能会发生变化。它在不断变化。而那个状态可以是stored/changed/known/etc。跨越多种媒介。

序列化是将对象的状态捕获为某种静态形式的过程,这种形式可以持久保存到更静态的介质中。具体来说,此信息需要包括稍后重新创建对象所需的一切。

形式或媒介是什么并不重要。数据可以是原始二进制、JSON、XML、文本、任何自定义格式等。存储介质可以是文件系统、数据库、网络连接、活动内存等。它可以存储几毫秒或几个世纪。


打个比方,考虑一个人。有很多信息构成了 "a person" 的一切。你会"serialize"一个人吗?

您可以将他们的 DNA 序列保存到计算机中(一个简单的字符数组就可以了)。但这会存储人的状态吗?您可以根据该数据重新创建 a 人,但您能否在相同状态 中重新创建同一个人 ?不,他们会失去所有的记忆。

所以在尝试序列化这个人时,我们发现代表一个人状态的信息比用于创建这个人的原始信息更多。该状态信息在人的一生中存储在单独的介质中,并且不容易获得。但是为了序列化这个人是必要的。

继续这个类比...想想《星际迷航》中的运输车。 "object" 是一个人,这个人被成功转换为数据流,然后在传输的另一端重新构建。这两个传输系统是独立的,只是交换信息。此信息足以将原始对象重新创建为序列化时的确切状态。

"Serialization"表示将一个对象转变为另一种状态,以达到转移或持久化的目的。

对象不是已经存储为一堆字节了吗?是的,但这不是重点。重点是坚持和转移。以图像为例:它在内存中是一回事,保存为 JPEG 时又是另一回事,保存为 GIF 或 TIFF 或 BMP 时又是另一回事。

序列化只是一种协议,在通过网络传输时强制对这些字节的组织方式进行某种排序吗?请参阅第一个关于序列化含义的问题的答案