【问题标题】:Partial deserialization of std::mapstd::map 的部分反序列化
【发布时间】:2016-10-31 13:59:59
【问题描述】:

有没有办法对使用 boost::archive::text_oarchive 序列化然后保存到文件的 std::map 进行部分反序列化? 例如,我们有一个大的序列化和保存的映射,其中键是整数,值是某种结构,现在我们需要将它分部分取回来……加载前 100 条记录,然后加载接下来的 100 条记录……等等。 是否有任何库、boost 类或解决方案可以做到这一点?

【问题讨论】:

  • 为什么现在需要将它分批取回?如果是因为你不想让你的线程被捆绑,那么就开始另一个线程来完成它并在完成后发出信号
  • 因为我们的序列化地图现在太大了,有时我们在尝试反序列化它并放入内存时会出现问题。
  • 那么,东辉给了你答案——你需要找到一台可以反序列化它的机器,然后以与你的新模块化设计相匹配的新格式重新序列化它。

标签: c++ serialization boost


【解决方案1】:

通常调用相同的 serialize() 函数来进行序列化和反序列化。如果您想将其部分取回,则应首先将其部分序列化。

【讨论】:

  • 感谢您的回答,但不幸的是,我们已经有了这么大的序列化地图,现在我们在尝试将其加载到一个部分时遇到了问题。
  • 一个简单的解决方案是反序列化整个地图,并复制部分。一个核心解决方案是了解序列化结果的格式——可能通过研究映射如何序列化以及键和值类型如何序列化的源代码——并编写一个特殊的反序列化函数。我相信这是可行的,但我强烈反对选择这种方法。
  • 我和张东辉在一起
  • 再次感谢,但现在我们只需要找出是否有现成的解决方案,据我所知答案是否定的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多