Language agnostic “a”是什么;连载;编程中的对象?

Language agnostic “a”是什么;连载;编程中的对象?,language-agnostic,serialization,Language Agnostic,Serialization,我到处都见过“序列化”这个词,但从来没有解释过。请解释这意味着什么。序列化是获取对象实例并将其转换为可通过网络传输或保存到存储(如文件或数据库)的格式的过程。序列化格式包含对象的状态信息 反序列化是使用序列化状态将对象从序列化状态重建为其原始状态的过程 真正简单的解释是,序列化是将内存中的某个对象(如类(对象)的实例)转换为适合传输或存储的结构的行为 一个常见的例子是在web服务中使用的XML序列化-我在服务器上有一个类的实例,需要通过web将其发送给您,我首先将其序列化为XML,这意味着在类中

我到处都见过“序列化”这个词,但从来没有解释过。请解释这意味着什么。

序列化是获取对象实例并将其转换为可通过网络传输或保存到存储(如文件或数据库)的格式的过程。序列化格式包含对象的状态信息


反序列化是使用序列化状态将对象从序列化状态重建为其原始状态的过程

真正简单的解释是,序列化是将内存中的某个对象(如类(对象)的实例)转换为适合传输或存储的结构的行为

一个常见的例子是在web服务中使用的XML序列化-我在服务器上有一个类的实例,需要通过web将其发送给您,我首先将其序列化为XML,这意味着在类中创建该数据的XML版本,一旦在XML中,我可以使用HTTP之类的传输轻松发送它


有几种形式的序列化,如XML或JSON。

序列化通常指将抽象数据类型转换为字节流的过程(有时还可以序列化为文本、XML或CSV或其他格式。重要的是,它是一种简单的格式,可以在不理解数据所表示的抽象对象的情况下进行读/写)。在将数据保存到文件或通过网络传输时,您不能只存储
MyClass
对象,您只能存储字节。因此,您需要获取重建对象所需的所有数据,并将其转换为可写入目标设备的字节序列,然后在稍后的某个时间读回并反序列化序列化,重构对象。

序列化(至少)有两种完全不同的含义。一种是将内存中的数据结构转换为比特流,以便可以将其写入磁盘并在以后进行重构,或者通过网络连接传输并在另一台机器上使用,等等

另一种含义与串行执行与并行执行有关——即确保一次只有一个执行线程执行某些操作。例如,如果要读取、修改和写入变量,则需要确保一个线程在另一个线程启动之前完成读、修改、写序列。

他们所说的“连载"指数据字节必须按某种标准化顺序写入串行存储设备,如文件输出流或串行总线。实际上,原始字节很少足够。例如,数据结构序列化程序的内存地址在重建对象的程序中可能无效根据存储的数据。因此需要一个协议。多年来,有很多很多标准和实现。我记得80年代中期有一个称为XDR的标准,但它不是第一个。

  • 您拥有特定格式的数据(例如列表、地图、对象等)
  • 您希望传输该数据(例如,通过API或函数调用)
  • 传输方式仅支持某些数据类型(例如JSON、XML等)
  • 序列化:将现有数据转换为支持的数据类型,以便传输
关键是您需要传输数据,并且传输方式只允许某些格式。您当前的数据格式不允许,因此您必须“序列化”它。因此,正如Mitch所回答的:


序列化是获取对象实例并将其转换为可传输格式的过程


类对象是抽象数据类型。抽象如“不是原始数据类型,而是表示抽象概念的东西”.A
Car
类是一种抽象数据类型。它表示程序中的某个抽象内容。其中没有Car。只有提供一个抽象内容的数据。为了将其序列化,必须拆除该抽象内容。不能将Car存储到文件中,但可以存储重建
Car
类i所需的数据不,我不是。我不是在说一个抽象类,我同意这是完全不同的。抽象数据类型几乎是一个类的更一般的术语(除了它很好地涵盖了无类语言中的等价物)。类是一种抽象,它是一种数据类型。将其称为抽象数据类型并不是我刚想到的想法。:)我很高兴有人提到了“序列化”的另一个含义——我记得第一次遇到“将对象吐出到文件”时我感到困惑,因为我一直用它来表示“关键部分”在那之前的很长一段时间里,“serialized”也可以用来表示“序列化对数据或代码的访问”。“Marshalling”是在Java/.NET上下文中(至少对我而言)使用“序列化”之前,我用来从文件(或其他流)获取对象数据的术语。如果有人能给出一个详细的示例,那就太好了。当我查找这个主题时,我也感到困惑。这些例子可以扩展到
pickle.dump(对象、文件)
pickle.load(文件)
(例如,使用Python),这在帮助理解方面完全是无用的。