C++中对象序列化的主要目的是为了更快的对象加载吗?

Is the main purpose of object serialization in C++ for faster object loading?

我正在阅读别人编写的项目代码。该项目的主要任务是将包含 8 列的大型结构化文本文件 (.txt) 中的内容读取到知识库对象中,该对象具有许多方法和变量。 KnowledgeBase 对象然后输出到一个二进制文件中。例如,知识库 class 至少有以下两个变量:

map<string, pair<string, string>> key_info
vector<ObjectInfo> objects
...

当我用gdb跟踪代码时,这些变量很容易理解。然后,它似乎正在将此类向量和映射转换为二进制形式。而上面的两个变量都有对应的二进制形式:

BinaryKeyInfo *bkeys
BinaryObjectInfo *bObjects

后面输出到二进制文件时,有这样的代码:

fwrite((char*)(&wcount),sizeof(int32_t),1,output);
fwrite((char*)bkeys,sizeof(KeyInfo_t),wcount,output);

从原始知识库到二进制的代码转换复杂。我的问题是,这种转换的主要目的是什么?它是为了比纯文本文件更快地将二进制文件加载到内存中吗?纯文本文件是。我了解到对象序列化主要是为了通过网络传输对象,但我不认为这里的目的是为了那个。它更像是加速数据加载和内存节省。这可能是 C++ 中对象序列化的一部分吗?

Is the main purpose of object serialization in C++ for faster object loading?

没有。序列化最重要的目的是将程序的状态转换成一种格式,可以存储在文件系统上,或者可以通过网络进行通信,并且可以反序列化。通常,两者的目的都是为了让另一个程序进行反序列化。有时反序列化器是同一程序的另一个实例。

反序列化的速度是一种指标,可用于衡量一种特定的序列化格式是否良好。快速撤消您所做的事情的能力不是您最初这样做的原因。

what's the benefit of converting them into binary vectors or maps?

正如我上面提到的,序列化的好处是能够将序列化数据存储在文件系统上,或者通过网络发送它。

what' the benefit between plain text files VS binary files?

文本序列化格式的优点:

  • 人类能够读写纯文本。人类通常无法读取或写入二进制文件。
  • 与实现相同功能的二进制格式 de-/serialiser 相比,以跨不同计算机工作的方式实现纯文本格式 de-/serialiser 通常更容易。

二进制序列化格式的优点:

  • 通常速度更快,使用的存储和带宽更少。
  • 如果不需要不同系统之间的通信,可以更容易实现。通常只有在非常简单的情况下才会出现这种情况。 (此外,通常需要跨系统兼容性,即使这种需求尚未实现)。