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序列化多个对象 的相关文章

  • C 中的分段错误

    我需要用 0 填充二维数组 但编译后的程序会出现此错误 怎么了 int main int vert 1001 1001 int hor 1001 1001 int dudiag 1416 1416 int uddiag 1416 1416
  • C++17 中带有 noexcept 的 std::function

    在 C 17 中noexcept 已添加到类型系统中 http www open std org jtc1 sc22 wg21 docs papers 2015 p0012r1 html void r1 void f noexcept f
  • 函数原型和数组参数

    我正在学习 C 语法 并且已经开始研究数组了 我想问你一个问题 但首先让我回顾一下 这样我就知道我已经弄清楚了 我知道您可以使用以下语法将变量定义为数组 name
  • 将 LINQ to Entities 查询中的每个项目转换为接口的最佳方法是什么?

    我有一个实现 IUser 的实体对象 User IQueryable
  • 将内核链接到 PTX 函数

    我可以使用 PTX 文件中包含的 PTX 函数作为外部设备函数 将其链接到另一个应调用该函数的 cu 文件吗 这是另一个问题CUDA 将内核链接在一起 https stackoverflow com questions 20636800 c
  • NUnit 测试运行顺序

    默认情况下 nunit 测试按字母顺序运行 有谁知道有什么方法可以设置执行顺序吗 是否存在这样的属性 我只是想指出 虽然大多数受访者认为这些是单元测试 但问题并没有具体说明它们是 nUnit 是一个很棒的工具 可用于各种测试情况 我可以看到
  • 错误 C2064:术语不计算为采用 1 个参数的函数

    class Student bool Graduate return m bGraduate class School vector
  • F# 内联如何工作?

    对于 F 我的理解是您可以使用 inline 关键字在调用站点执行类型专门化 那是 val inline a gt b gt c when a or b static member a b gt c 约束条件是 a or b必须有一个静态成
  • 有哪些 API 可在 Windows 中使用 C# 配置扬声器设置?

    我环顾了很多不同的地方 但似乎找不到一个简单的方法来做到这一点 我在 Windows 7 中有多个声卡 并使用 HDMI 将声音输出到我的 AVR 放大器 我遇到的问题是 当放大器关闭时 它会导致窗口丢失扬声器配置 所以我想做的是编写一个小
  • 为什么Boost在“程序选项”中使用全局函数覆盖来实现自定义验证器

    这个例子 http www boost org doc libs 1 55 0 doc html program options howto html idp163429032显示一个名为validate在全局范围内定义重载函数boost
  • 让 GCC/Clang 使用 CMOV

    我有一个简单的标记值联合 这些值可以是int64 ts or doubles 我正在对这些联合进行加法 但需要注意的是 如果两个参数都代表int64 t值 那么结果也应该有一个int64 t value 这是代码 include
  • Java反序列化中避免重复对象

    我有两个列表 list1 和 list2 其中包含对某些对象的引用 其中某些列表条目可能指向同一对象 然后 由于各种原因 我将这些列表序列化为两个单独的文件 最后 当我反序列化列表时 我想确保我不会重新创建超出需要的对象 换句话说 List
  • C语言中如何将整数转换为字符? [复制]

    这个问题在这里已经有答案了 C语言中如何将整数转换为字符 C 中的字符已经是数字 字符的 ASCII 代码 无需转换 如果要将数字转换为相应的字符 只需添加 0 即可 c i 0 0 是 ASCii 表中的一个字符
  • MPI_Gatherv:根数组中收到的垃圾值

    我正在尝试实施MPI Gatherv函数于C 根据我的程序 包括 root 在内的每个进程都应该创建一个大小等于 进程的等级 1 这将在所有单元格中保持进程的等级 然后这个本地数组被收集到根的 rcv array 中 不知何故 我得到了垃圾
  • 如何从句柄确定进程是 32 位还是 64 位?

    如何从使用 OpenProcess 获取的进程句柄中获取信息 无论进程是 32 位还是 64 位 是的 IsWow64Process 毫无用处 令人烦恼 它的真正意思是 启用了 32 位模拟 如果您在 32 位操作系统上运行 则返回 fal
  • C# 记录类型:记录子类之间的相等比较

    给定父记录类型 public record Foo string Value 和两个记录子类Bar and Bee我想知道是否可以实施Equals在基类中 因此 Foo Bar 或 Bee 的实例都被考虑equal基于Value 两者都与E
  • Azure Function App Azure 服务总线触发器触发两次

    我使用带有服务总线触发器的 Azure Function Apps 来读取服务总线并对服务总线消息的内容执行操作 服务总线接收 JSON 序列化对象 然后将 JSON 消息反序列化回 Function App 中的对象 然而 由于某种原因
  • 字符串常量之前应有非限定 ID

    我目前正在编写一个 C 应用程序 它与 math h 结合实现了振荡器 我拥有的代码应该可以很好地用于该应用程序 尝试编译目标文件 但是我遇到编译器错误 很可能与语法 等有关 我认为这与命名空间有关 错误 终端输出 User Name Ma
  • 散列 hash_hmac 时,Convert.ToChar(0) 散列结果与 PHP 中的 chr(0) 不同的字符串

    我在 PHP 中有一个字符串 它被转换为字节数组并进行哈希处理 转换为字节数组的字符串如下所示 G 字符 0 便便 我需要 C 中的等效字节数组 这样我才能得到相同的哈希值 编辑 这是完整的问题 生成的哈希值不同 PHP api secre
  • gwt - 在 RPC 调用中使用 List

    我有一个 RPC 服务 方法如下 public List

随机推荐

  • 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