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



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

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++中对象序列化的一部分吗?

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

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

去串行化的速度是一个指标,可以用来衡量一种特定的串行化格式是否是好的。快速撤消所做操作的能力是,而不是您最初这么做的原因。

将它们转换为二进制矢量或映射有什么好处?

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

纯文本文件与二进制文件之间的优势是什么?

文本序列化格式的优点:

  • 人类能够阅读和书写纯文本。人类通常不能读取或写入二进制文件
  • 通常情况下,以跨不同计算机工作的方式实现纯文本格式的去串行化器比实现相同的二进制格式的去序列化器更容易

二进制串行化格式的优点:

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

最新更新