提升文件末尾序列化

2023-12-23

我使用 Boost 将多个对象序列化为二进制存档。 当从 a 读回这些对象时binary_iarchive,有没有办法知道存档中有多少对象,或者只是检测存档结尾的方法?

我发现的唯一方法是使用 try-catch 来检测流异常。 提前致谢。


我可以想到很多方法:

  1. 将 STL 容器序列化到您的存档或从您的存档序列化 STL 容器(请参阅文档 http://www.boost.org/doc/libs/release/libs/serialization/doc/tutorial.html#stl)。存档将自动跟踪容器中有多少对象。

  2. 在序列化对象之前序列化计数变量。当读回你的对象时,你会事先知道你期望读回多少个对象。

  3. 您可以让最后一个对象具有特殊值,该值充当一种指示对象列表末尾的哨兵。也许你可以添加一个isLast对象的成员函数。

  4. 这不是很漂亮,但是您可以在存档旁边有一个单独的“索引文件”,用于存储存档中的对象数量。

  5. Use the tellp底层流对象的位置来检测是否位于文件末尾:

示例(只是一个草图,未经测试):

std::streampos archiveOffset = stream.tellg(); 
std::streampos streamEnd = stream.seekg(0, std::ios_base::end).tellg();
stream.seekg(archiveOffset);

while (stream.tellp() < streamEnd)
{
    // Deserialize objects
}

这可能不适用于 XML 存档。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

提升文件末尾序列化 的相关文章

随机推荐

  • CocoaPods podspec lint 失败 - 找不到文件

    我正在尝试分发我的 Pod 但我在验证时遇到问题 当我尝试检查我的 podspec 时 我得到 ERROR iOS xcodebuild path to my source file m 14 9 fatal error KeyValueO
  • Python VS代码无法与IPython内核连接

    我创建了一个新的虚拟环境并尝试连接 VS 代码 当我在 VS code 中打开包含文件和虚拟环境的文件夹时 在左下角我可以看到选择的 python 解释器 如下图所示 但是 当我运行该程序时 它显示正在连接到 IPython Kernel
  • 从 Java 中的基类访问子类字段

    我有一个名为的基类Geometry其中存在一个子类Sphere public class Geometry String shape name String material public Geometry System out print
  • setTimeout返回什么?

    我很好奇 setTimeout 返回什么 所以我做了一个快速测试 var thing setTimeout function 1 让我惊讶的是它给了我一个数字 1351每次都是不同的 那么它返回的真的只是一个数字吗 那么我实际上也可以这样做
  • 交叉过滤查询

    是否可以过滤以数组作为值的交叉过滤数据集 例如 假设我有以下数据集 var data bookname the joy of clojure authors Michael Fogus Chris Houser tags clojure l
  • 如果定义了属性,则从 Waterline 中的模型中获取结果

    我有一个模型 其中不需要每个属性 我想查询模型并返回属性所在的所有实例is定义的 这就是我的think代码应该看起来像这样 但它不起作用 有什么想法或一些详细文档的链接吗 MyModel find where propertyThatMay
  • iOS SDK:切换相机时如何导致视图翻转

    在 iOS Objective C 上相当新 我正在对 Apple 进行修改AVCam http bit ly IFQn3h 视频采集 示例代码 想在前后摄像头切换时模仿原生摄像头的翻转动画 看起来这似乎很容易 但我无法掌握它是如何完成的
  • extjs解析模板中嵌套的json

    尝试 未成功 显示嵌套 json 中的数据 JSON 可能看起来像 contacts id 1 client id 135468714603 addresses id 1 contact id 1 address id 16 address
  • R中magrittr和arima的兼容性问题

    考虑以下示例 library tidyverse set seed 1 forecast forecast x lt cumsum rnorm 10 y1 lt arima x order c 1 0 0 y2 lt x gt arima
  • 保存模型会破坏一对多关系

    当我保存一个父对象 其中有许多子对象 时 这种关系似乎被破坏了 这Ember 文档 http emberjs com guides models persisting records 在这个问题上保持沉默 我需要做什么才能使父对象仍然显示子
  • JavaScript 中 += 和 =+ 的区别

    我想知道为什么运行第三行代码后的结果是a is 5 a 10 b 5 a b 尴尬的格式 a b 相当于 a b And b只是一种奇特的铸造方式b编号 如下所示 var str 123 var num str 您可能想要 a b 相当于
  • Nginx server_name regexp 不能作为变量使用

    有人告诉我为什么我仍然遇到这样的错误吗 Restarting nginx emerg unknown domain name variable configuration file etc nginx nginx conf test fai
  • Dapper MultiMap 不适用于具有 NULL 值的 splitOn

    我在尝试在包含以下内容的列上进行拆分时 在 dapper 中遇到了 MultiMaps 的问题NULL Dapper 似乎没有实例化对象 我的映射函数接收到null而不是对象 这是我的新测试 class Product public int
  • 响应宽度 Facebook 页面插件

    Facebook 推出了新的页面插件来取代 Like 框插件 文档 https developers facebook com docs plugins page plugin https developers facebook com d
  • 在 Highcharts 股票图表上将最后一点的值显示为标签或工具提示

    我在一张股票图表 HighCharts 中有多个不同比例的数据系列 我想将每个系列连接到它的轴或显示每个系列的最后一个点的值 类似于数据标签 但仅适用于每个系列的最后一个点 function container highcharts cha
  • 如何在 contenteditable div 中输入时创建一个段落?

    我正在为我的一个项目制作一个简单的编辑器 我需要使用可编辑的 div 使用contenteditable财产 我需要两个功能 输入两次后自动插入小时 创建一个段落而不是 br 进入并专注于它 所以我写了这个 带着一些灵感 这是负责的代码的一
  • 如何将 EditTextPreference 限制在范围 1024:65535

    我有一个 EditTextPreference 定义为
  • missModalViewControllerAnimated 非原子的?

    看来我有一个奇怪的时间问题 我打开 uiimagepicker 作为模态视图 当用户选择图像或我想要拍摄图像时 将其保存到变量中 然后以模态视图打开电子邮件界面 我的问题是 我在图像选择器上调用dismissModalViewControl
  • Visual Studio 2017 和 SAP Crystal Reports

    我已经下载并安装了视觉工作室 2017 社区之后我下载并安装了Crystal Report 支持包 20 v 13 0 20 2399 我打开了视觉工作室2017并创建一个新项目 然后右键单击我的项目 然后单击添加项目 我寻找水晶报告 rp
  • 提升文件末尾序列化

    我使用 Boost 将多个对象序列化为二进制存档 当从 a 读回这些对象时binary iarchive 有没有办法知道存档中有多少对象 或者只是检测存档结尾的方法 我发现的唯一方法是使用 try catch 来检测流异常 提前致谢 我可以