序列化与文件写入

serialization versus file writing

我正在尝试了解序列化和反序列化,但仍有一些疑问。它与将文件写入磁盘有何不同。如果我想将一些数据存储在磁盘上或通过网络发送,我可以不使用

写入数据吗?
open(filename), write(filename) and close(filename)?

这将根据我选择的模式以文本或二进制格式将数据存储在磁盘上的文件名中。然后我可以通过网络发送这个文件。

这与序列化有何不同? 这与协议缓冲区有何不同?

请帮助我和其他人一劳永逸地确定这个概念

来自wikipedia

In computer science, in the context of data storage, serialization is the process of translating data structures or object state into a format that can be stored (for example, in a file or memory buffer, or transmitted across a network connection link) and reconstructed later in the same or another computer environment.

因此,无论您如何操作(如何存储文件、如何发送文件等),重要的是您能够重建(反序列化)原始文件来自过渡状态的对象。

假设您在网上购买了 Lego Millenium Falcon。这是一个很棒的对象,但不可能将它发送给您刚刚构建的对象。所以在乐高他们解构它并将它放入一个特殊的盒子中(序列化)。盒子的形状取决于他们使用哪个渠道将其发送给您。例如,如果他们用手把它带给你,他们会用手提包;如果他们使用快递,他们将使用与所使用的特定快递兼容的盒子(JSON、XML、YAML...)。一周后你拿到了​​盒子,所以你打开盒子并愉快地构建了 Millennium Falcon(反序列化)。几周后,您需要将 Falcon 存放在壁橱中,但它对于架子来说太大了,因此您将其解构并将碎片放入适合架子的盒子(文件?)中。一段时间后,您将其取回并再次重建它。 您可以随时 deconstruct/pack-unpack/construct 该对象。 在计算机科学中,你可以使用多种媒体来 store/send 盒子,你可以运送它,你可以携带它,将来你会传送它。

关于protocol buffer,你可以把它想象成一个特殊的盒子,可以适应你要发送的对象,它可以被多人packed/unpacked使用,即使他们说的不是同一种语言。