我经常见到“serialized”这个词,但从未解释过。请解释一下它的含义。
我经常见到“serialized”这个词,但从未解释过。请解释一下它的含义。
序列化通常是指将一个抽象数据类型转换为一串字节的过程(有时候也可以序列化为文本、XML、CSV或其他格式。重要的是它是一种简单的格式,可以在不理解数据所代表的抽象对象的情况下进行读取/写入)。当保存数据到文件或通过网络传输时,你不能只存储一个MyClass
对象,你只能存储字节。因此,你需要获取重构对象所需的所有数据,并将其转换为一个可写入目标设备的字节序列,并在稍后的某个时间点读回并反序列化以重构你的对象。
Car
类是一个抽象数据类型,它在程序中代表某个抽象的概念。它里面没有汽车,只有提供了抽象一个汽车所需的数据。为了序列化它,这种抽象必须被拆除。你不能将一辆汽车存储到文件中,但可以存储重建Car
类实例所需的数据。 - jalf序列化是指将一个对象实例转换成可在网络传输或持久化到存储设备(如文件或数据库)中的格式。序列化格式包含对象的状态信息。
反序列化是指使用序列化状态来重建对象,使其恢复到原始状态的过程。
序列化有至少两个完全不同的含义。一个是将内存中的数据结构转换为一串位,以便可以将其写入磁盘并在以后重新构建,或在网络连接上传输并在另一台机器上使用等。
另一个含义与串行与并行执行相关--即确保只有一个执行线程在执行某些操作。例如,如果您要读取、修改和写入一个变量,则需要确保一个线程完成读取、修改、写入序列后才能启动另一个线程。
他们说的是,“串行”一词指的是数据字节必须按照某种标准顺序放置才能写入串行存储设备,例如文件输出流或串行总线。实际上,原始字节很少足够。例如,序列化数据结构的程序中的内存地址可能在从存储的数据重构对象的程序中无效。因此需要一种协议。多年来,已经有许多标准和实现。我记得80年代中期有一个叫做XDR的协议,但它不是第一个。
关键在于您需要传输数据,而传输方式只允许某些格式。您当前的数据格式不被允许,因此必须“序列化”它。正如Mitch所回答的那样:
序列化是将对象实例转换为可传输格式的过程。
pickle.dump(object, file)
和pickle.load(file)
等示例,实际上对于理解毫无帮助。 - Mike Williamson