我正在阅读其他人编写的项目的代码。该项目的主要任务是将包含 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++ 中对象序列化的一部分吗?