我知道序列化是什么,但对我来说,这是一个无法描述其含义的术语。
为什么我们叫序列化序列化?将对象转换为原始数据(以及膨胀/反序列化,就此而言)适用于与“串行”一词相关的任何事情是什么?谁创造了这个词,为什么?
我知道序列化是什么,但对我来说,这是一个无法描述其含义的术语。
为什么我们叫序列化序列化?将对象转换为原始数据(以及膨胀/反序列化,就此而言)适用于与“串行”一词相关的任何事情是什么?谁创造了这个词,为什么?
它可能来自网络和通信,需要将数据转换为 1 和 0 的串行流。
维基百科说:
在计算机科学中,在数据存储和传输的上下文中,序列化是将对象转换为位序列的过程,以便它可以持久保存在存储介质(例如文件或内存缓冲区)上或跨网络连接链路。当根据序列化格式重新读取生成的一系列位时,它可用于创建原始对象的语义相同克隆。对于许多复杂的对象,例如那些大量使用引用的对象,这个过程并不简单。
我还记得昨晚我从事的第一个网络项目(1983 年)使用术语“序列化程序”来表示将消息从 C 中的结构转换为一系列字节以写入网络传输的代码部分。它必须获取逻辑上表示消息的结构,并将其输出到网络上的下一个字节之后的每个字节。
此代码的作者来自 BB&N,因此为您提供了查找历史的方向。
序列化通过数据结构和指针将内存中的数据转换为一系列字节,这些字节旨在保存在顺序媒体(如硬盘)上或通过类似串行连接的方式传输。
我认为 John Saunders 走在正确的轨道上,数据作为“流”发送到磁盘或通过网络这一事实几乎可以肯定是这个术语的起源。
然而,另一种思考方式是这样的:程序的状态分布在整个内存中,指针/链接指向各处。你有数组、列表、树、调用堆栈、分配的内存堆等,没有特定的顺序。
当你想保存一些状态时,你不能在你的程序中使用很多信息。例如,任何指针值或堆栈偏移量(无论是直接使用还是由语言运行时内部使用等)都可能在下次程序运行时无效,因为堆将用于分配稍微不同的内存块系列. 保存这些指针值是没有用的。
要保存某些状态,您必须“整理事务”,以便保存的信息只是稍后将相关的部分。
串行意味着一个接一个。因此,它变成了一个长字节流。
它基本上只是表示按顺序排列的一系列项目。序列化这个词有时也用于文学。
早在早期,我们将数据保存到磁带等介质,然后是软盘,它一次只能读/写一位,而存储的本质是磁介质相对于读/写磁头以一定的速度移动. 所以数据的物理布局是 1 和 0,从媒体上的某个点开始,到另一个点结束。因此,数据实际上是以串行方式传输到存储的。