我在这里问,因为我已经尝试过搜索,但我不知道这些东西是否存在以及它们的名字是什么。
我开始用自定义模式解释我的意思是:假设我需要序列化foo,bar和boo类型的对象或数据,通常库以一种非常简单的方式为用户处理这个,首先出现的是首先在序列化过程中,所以如果我首先序列化所有foo,它们将被写在文件的“顶部”,并且所有bar和boo都在foo之后。
现在我想在我的文件中保留顺序并根据自定义模式组织内容,这可以通过Boost实现吗?哪个部分提供此功能?
第二件事,那与第一件事严格相关,我也希望以一种我不会被解析的方式访问我的序列化二进制文件,并读取所有以前的值,只提取我的那个感兴趣的,有点像基于内存地址工作的RAM,并提供随机访问,而不强迫你解析所有其他地址。
感谢。
答案 0 :(得分:1)
关于第一个问题:Boost序列化库对于将对象转换为序列化形式后会发生什么是不可知的。它通过使用输入和输出流来实现。文件只是 - fostream / fistream。但是,对于其他类型的流,您所说的顺序/模式没有意义。想象一下,您正在通过网络发送序列化对象 - 图书馆无法知道它必须重新排列对象的顺序,事实上,一旦发送它就无法做到这一点。因此,它不支持您正在寻找的内容。
你可以做的是创建一个包装器,它只是缓存对象的序列化版本,并在你告诉它将它们写出来之前将它们安排在内存中,或者知道,因为你正在使用文件,它可以稍后tellg
到文件中的适当位置并追加(这种方法需要您存储您写入文件的对象的位置)。
至于第二件事 - 随机存取文件读取。您必须确切知道对象在内存中的位置。如果您知道文件的结构不会更改,则可以在文件流上seekg
,然后将其移至boost以进行反序列化。但是,如果文件结构发生变化,您仍需要知道文件中对象的位置。如果您不想解析文件以找到它,则必须在序列化期间将其存储在某处。例如 - 您可以在文件顶部维护一种对象注册表。你仍然需要解析它,但它应该只是一个简单的[Object identifier]-[location in file]
类。