序列化与文件编写

时间:2016-05-18 15:15:49

标签: serialization save protocol-buffers

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

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

这将以文本或二进制格式将数据存储在文件名中,具体取决于我选择的模式。然后,我可以通过网络发送此文件。

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

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

1 个答案:

答案 0 :(得分:1)

来自wikipedia

  

在计算机科学中,在数据存储的上下文中,序列化是将数据结构或对象状态转换为可以存储的格式的过程(例如,在文件或内存缓冲区中,或通过网络连接链接传输)并且稍后在相同或另一个计算机环境中重建。

所以,无论你是怎么做的(你如何存储文件,如何发送文件等),重要的是你能够重建(反序列化)原始对象过渡国家。

假设您在互联网上购买了Lego Millenium Falcon。这是一个很棒的对象,但是不可能将它发送给刚才构建的对象。所以在乐高他们解构它并将它放入一个特殊的盒子(序列化)。盒子形状取决于他们使用哪个通道将其发送给您。例如,如果他们手工带给你,他们会使用手提包;如果他们使用快递,他们将使用与所使用的特定快递兼容的箱子(JSON,XML,YAML ......)。一个星期后,你得到了这个盒子,所以你打开包装盒,愉快地构建千年隼(反序列化)。几个星期之后你需要把猎鹰存放在你的衣柜里,但它对于货架来说太大了,所以你解构它并把它们放在一个适合货架的盒子里(文件?)。过了一段时间,你把它拿回来再重新构建它。 您可以在每次需要时解构/打包/解压缩/构造对象。 与计算机科学一样,你可以使用多种媒体来存储/发送盒子,你可以运送它,你可以带它,将来你会传送它。

关于协议缓冲区,您可以将其视为一个特殊的框,可以适应您必须发送的对象,并且可以被多人打包/解包,即使他们不会说同一种语言。