Boost序列化多个对象

2023-11-24

我正在使用二进制序列化带有 boost 的类。我使用 ios::append 来继续将多个对象附加到该文件。如何检索所有存储的对象?

这是我的测试类,它尝试多次序列化并检索它们。我已经评论了我没有获得正确数据的故障点。

using namespace std;
 class Data {
 public:
double get_latitude() const {
    return _latitude;
}

double get_longitude() const {
    return _longitude;
}

void set_latitude(double _latitude) {
    this->_latitude = _latitude;
}

void set_longitude(double _longitude) {
    this->_longitude = _longitude;
}
private:
double _latitude;
double _longitude;
friend class boost::serialization::access;
// When the class Archive corresponds to an output archive, the
// & operator is defined similar to <<.  Likewise, when the class Archive
// is a type of input archive the & operator is defined similar to >>.
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
    ar & _latitude;
    ar & _longitude;
}
};

class DataTest: public CppUnit::TestFixture {
CPPUNIT_TEST_SUITE( DataTest);
CPPUNIT_TEST(testMultipleSaveData);
CPPUNIT_TEST_SUITE_END();

public:

void testMultipleSaveData() {
    Data data;
    data.set_latitude(1.0);
    data.set_longitude(2.0);
    saveData(data);
    Data secondData;
    secondData.set_latitude(5.0);
    secondData.set_longitude(6.0);
    saveData(secondData);
    Data returnData;
    Data return2Data;
    {
        // create and open an archive for input
        std::ifstream ifs("data.dat", ios::binary);
        boost::archive::binary_iarchive ia(ifs);
        // read class state from archive
        ia >> returnData;
        ia >> return2Data;
        // archive and stream closed when destructors are called
    }
    CPPUNIT_ASSERT_EQUAL(data.get_latitude(), returnData.get_latitude());
    CPPUNIT_ASSERT_EQUAL(data.get_longitude(), returnData.get_longitude());
    //Failure on next line
    CPPUNIT_ASSERT_EQUAL(secondData.get_latitude(), return2Data.get_latitude());
    CPPUNIT_ASSERT_EQUAL(secondData.get_longitude(), return2Data.get_longitude());
}

void saveData(Data data) {
    std::ofstream ofs("data.dat", ios::binary | ios::app);
    boost::archive::binary_oarchive oa(ofs);
    oa << data;
}

 };
 CPPUNIT_TEST_SUITE_REGISTRATION( DataTest);

决定添加另一个答案以避免完全混乱。

你的问题是你序列化到单独的实例boost::archive::binary_oarchive. 提升存档在文件的开头存储一些内部信息(我不会将其称为标头,因为增强序列化有单独的标头来存储版本号),并且您会收到此信息的两个副本,位于文件的开头和数据序列化之间。

提升存档不是为这种用途而设计的。甚至指定boost::archive::no_header像:

boost::archive::text_oarchive oa(ofs, boost::archive::no_header);

没有帮助,因为此选项配置另一个包含版本号的标头。您需要序列化到同一个实例提升存档.

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

Boost序列化多个对象 的相关文章

随机推荐

  • Swift 弱引用比强引用慢得多

    我正在用 Swift 构建一个物理引擎 在对引擎进行了一些最近的添加并运行基准测试后 我注意到性能大幅下降 例如 在下面的屏幕截图中 您可以看到 FPS 如何从 60 FPS 下降到 3 FPS FPS 位于右下角 最终 我将问题追溯到一行
  • C# Windows 窗体应用程序 - 从另一个线程和类更新 GUI?

    我进行了大量搜索 但似乎找不到与我的具体问题相关的任何内容 我希望能够从另一个类 SocketListener 更新我的 MainUI 表单 并且在其中我有一个处理网络的线程 clientThread 现在 我可以从网络线程运行简单的输出
  • Magento 中独立的读写数据库

    我在网上找不到任何关于如何为 Magento 配置两个独立数据库的示例 一个用于读取请求 一个用于写入请求 我认为这应该发生在 app etc local xml 中 但我不知道语法是什么 有人知道语法或者有博客文章的链接或者我的搜索没有找
  • 将大量 CSV 文件上传到 SQL Server 数据库

    我需要将大量 16GB 超过 65 万条记录 CSV 文件上传到 SQL Server 2005 数据库中的单个表 有人对执行此操作的最佳方法有任何指示吗 Details 我目前正在使用 C 控制台应用程序 NET Framework 2
  • 在 Google 路线上添加 InfoWindow

    我正在尝试向路线添加信息窗口 有很多在标记上的事件侦听器上添加 InfoWindow 的示例 但是我如何移动信息窗口以显示从一个标记到另一个标记的实际计划路线 之前已经有人尝试问过这个问题但没有回应 路线信息窗口 不管怎样 我做了很多谷歌搜
  • 设置 Team Foundation Server 2010 的用户权限

    我们已经成功安装了TFS 2010 但不知道如何设置用户权限 我们是小型项目 有五个开发人员 一名经理和一名秘书 每个开发者都自己负责一个或多个项目 我们与任何项目之间没有合作 我们希望每个人都能看到每个项目的所有代码 但只有那些负责代码的
  • Windows 中是否有相当于 linux 命令“perf stat”的命令?

    Windows 中是否有相当于 linux 命令 perf stat 的命令 例如查看前端停顿 缓存未命中和其他性能计数器数据 perf是仅限 Linux 的分析器 能够访问硬件事件计数器 缓存未命中 CPU 停顿等 该分析器支持许多 CP
  • SQLAlchemy 一个映射类中的多个外键到同一主键

    我正在尝试设置一个 postgresql 表 该表有两个外键指向另一个表中的相同主键 当我运行脚本时出现错误 sqlalchemy exc AmbigouslyForeignKeysError 无法确定关系 Company stakehol
  • Chrome 中未捕获的 ReferenceError:ActiveXObject 未定义错误

    我在 Chrome 中遇到此错误 未捕获的引用错误 ActiveXObject 未定义 我的代码是 function loadModel document getElementById lModelMsg innerText Loading
  • 如何自定义/样式 codeigniter 错误?

    我正在尝试自定义 CSS HTML 以在 codeigniter 中显示错误消息 这样我就可以为每个标签应用一个标签并设置它们的样式 我尝试用谷歌搜索并搜索手册 但一定是搜索了错误的术语 有人可以帮助我吗 你可以做这样的事情 this gt
  • 在画布标签上绘制箭头

    我想使用canvas标签javascript绘制一个箭头 我已经使用二次函数实现了它 但是我在计算箭头的旋转角度时遇到问题 有人对此有任何线索吗 谢谢 我能得到的就这么简单 您必须自己在前面添加 context beginPath 并附加
  • Python:类似 jQuery 的函数链?

    我在谷歌上找不到任何关于这个主题的信息 所以我想我应该在这里问 是否可以像 jQuery 那样使用 Python 链接函数 my list foo1 arg1 arg2 foo2 arg1 arg2 foo3 arg1 arg2 etc 当
  • Javascript (ES6) 中的“...”是什么意思? [复制]

    这个问题在这里已经有答案了 我正在学习 Redux React 和 ES6 我已经使用 JS 进行了开发 但是 ES6 的这个新世界让我感到惊讶 它有很多新的东西 比如 gt 来声明箭头函数等 然而 在这项新的 Redux 研究中 我面临着
  • 如何在 Perl 中读取 Excel 文件?

    我正在寻找一些关于如何编写 Perl 脚本以从 Excel 文件读取数据 然后使用读入的数据 希望作为字符串 并将其传递到另一个 Perl 文件 作为参数 的示例 建议 目标是拥有一个表 用户可以在该表中键入一些数据 ftp 目标或文件名
  • ELF 可执行文件中 .dynamic .dynsym 和 .dynstr 之间的区别

    我的初步了解是 dynamic包含可执行文件需要加载的库 dynsym包含外部符号 例如setsockopt GLIBC 2 0 dynstr包含功能需求字符串 总的来说 我对这些部分如何一起创建二进制文件有点困惑 特别是 dynsym a
  • 我们可以在 mongodb 中更新/更新记录吗?数据源是kafka

    我们可以更新 更新插入 mongodb 中的记录 但是是否有任何方法或函数可以让我们直接在 mongodb 中更新或更新插入文档 并且源系统是 kafka 目标系统是 mongodb 是的 我们可以更新 更新插入数据 要更新 您必须在 Ka
  • Laravel Eloquent JSON Contains,如何提供WhereIn逻辑(数组值之一)

    这是我的代码 protected function room count room count query this gt builder gt whereJsonContains rent requests rooms count roo
  • 伪流式传输 MP4 文件

    我有一些关于伪流 MP4 文件的问题 是否下载了整个文件 例如 如果我将 1 分钟删除为 2 分钟的视频 是否只下载后半部分从而节省带宽 我可以使用 Chrome 开发工具检查这个吗 我该如何创建可用于伪流媒体的 MP4 我已经读到元数据需
  • 如何将我的 WordPress 博客合并到 iOS 应用程序中?

    如何将我的 WordPress 博客合并到 iOS 应用程序中 我有一个漂亮的文字新闻网站 我想创建一个本机 iOS 应用程序 我有 iOS 编码知识 但我只是不知道如何以漂亮的方式展示所有最新的博客 提前致谢 有很多方法可以实现这一目标
  • Boost序列化多个对象

    我正在使用二进制序列化带有 boost 的类 我使用 ios append 来继续将多个对象附加到该文件 如何检索所有存储的对象 这是我的测试类 它尝试多次序列化并检索它们 我已经评论了我没有获得正确数据的故障点 using namespa