【问题标题】:What is a "serialized" object in programming? [duplicate]什么是编程中的“序列化”对象? [复制]
【发布时间】:2011-01-11 08:35:06
【问题描述】:

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

【问题讨论】:

  • 如果有人能给出一个详细的例子,那就太好了。当我查到这个话题时,我也很困惑。示例扩展到pickle.dump(object, file)pickle.load(file)(例如使用Python),老实说,这对于帮助理解完全没有用。

标签: language-agnostic serialization


【解决方案1】:

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

【讨论】:

  • 类对象是抽象数据类型。抽象如“不是原始数据类型,而是代表抽象概念的东西”。 Car 类是一种抽象数据类型。它代表程序中的抽象事物。里面没有汽车。只是提供抽象的数据。并且必须拆除该抽象以便对其进行序列化。您不能将汽车存储到文件中,但可以存储重建Car 类实例所需的数据。
  • 不,我不是。我不是在谈论抽象类,我同意这是完全不同的东西。抽象数据类型几乎是类的更通用术语(除了它很好地涵盖了无类语言中的等价物)。类是一种抽象,它是一种数据类型。将其称为抽象数据类型并不是我刚刚提出的想法。 :)
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      • 我很高兴有人提到了“序列化”的其他含义 - 我记得我第一次遇到“将对象吐出到文件”的含义时感到困惑,因为我一直在使用它在此之前很长一段时间都表示“关键部分”。
      • 否 - “序列化”也可用于表示“序列化访问数据或代码”。 “编组”是我用来从文件(或其他流)获取对象数据/从文件(或其他流)获取对象数据的术语,然后术语“序列化”用于 Java/.NET 的上下文中(至少对我而言)。
      【解决方案5】:

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

      【讨论】:

        【解决方案6】:
        • 您有特定格式的数据(例如列表、地图、对象等)
        • 您希望传输该数据(例如通过 API 或函数调用)
        • 传输方式仅支持某些数据类型(例如 JSON、XML 等)
        • 序列化:将现有数据转换为受支持的数据类型,以便传输。

        关键是您需要传输数据,并且您传输的方式只允许某些格式。您当前的数据格式是不允许的,因此您必须“序列化”它。因此,正如米奇回答的那样:

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

        【讨论】:

          猜你喜欢
          • 2014-01-31
          • 2011-03-03
          • 2010-10-01
          • 2023-03-31
          • 2010-11-21
          • 2010-10-21
          • 2010-10-11
          • 1970-01-01
          相关资源
          最近更新 更多