什么是编程中的“序列化”对象?

时间:2010-01-31 05:39:42

标签: language-agnostic serialization

我已经看到了“序列化”一词,但从未解释过。请解释一下这意味着什么。

6 个答案:

答案 0 :(得分:52)

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

答案 1 :(得分:12)

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

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

答案 2 :(得分:5)

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

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

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

答案 3 :(得分:5)

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

另一个含义涉及串行与并行执行 - 即确保一次只执行一个执行线程。例如,如果您要读取,修改和编写变量,则需要确保一个线程在另一个线程启动之前完成读取,修改和写入序列。

答案 4 :(得分:2)

他们说了什么。 “串行”一词指的是必须将数据字节置于某种标准化顺序以便写入串行存储设备,如文件输出流或串行总线。实际上,原始字节很少就足够了。例如,在从存储的数据重建对象的程序中,来自序列化数据结构的程序的存储器地址可能是无效的。所以需要一个协议。多年来,已经有许多标准和实施方案。我记得80年代中期的一个叫XDR,但它不是第一个。

答案 5 :(得分:0)

  • 您拥有特定格式的数据(例如列表,地图,对象等)
  • 您想传输该数据(例如通过API或函数调用)
  • 传输方式仅支持某些数据类型(例如JSON,XML等)
  • 序列化:您可以将现有数据转换为支持的数据类型,以便进行传输。

关键是您需要传输数据,而传输的方式只允许某些格式。您不允许使用当前的数据格式,因此必须“序列化”它。因此,米奇回答说:

  

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