问题标签 [boost-serialization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1032 浏览

c++ - 如何在 boost 序列化中使用数组优化

我必须序列化一个对象,该对象包含一个std::vector<unsigned char>可以包含数千个成员的对象,而该向量大小的序列化不能很好地扩展。

根据文档,Boost 提供了一个包装类数组,用于包装向量以进行优化,但它会生成相同的 xml 输出。在 boost 代码中潜水,我发现了一个名为的类use_array_optimization,它似乎可以控制优化,但默认情况下会以某种方式停用。我也试图覆盖没有结果的序列化函数。

我想知道如何激活优化,因为 boost 中的文档不清楚。

0 投票
2 回答
1844 浏览

c++ - 提高对受保护数据的序列化访问

当我尝试使用受保护成员序列化类时,出现以下错误:“无法访问在类 NetElement 中声明的受保护成员”。这个想法是我想在类定义之外有一个序列化函数。我究竟做错了什么?

最好的问候,mightydodol


这是代码...

0 投票
2 回答
8603 浏览

c++ - 如何连接 Boost 序列化和 iostream 以将对象序列化和 gzip 到字符串?

我一直在使用 Boost 序列化库,它实际上非常好,并且让我可以制作简单的包装器来将我的可序列化对象保存为字符串,如下所示:

问题是,我刚刚发现也需要压缩我的序列化数据,所以我正在考虑使用 boost::iostreams 中的过滤器来做到这一点。我想出了如何使用文件成功地做到这一点:

但无法弄清楚如何正确保存到压缩字符串。问题是我没有刷新过滤器链,但我尝试了弹出和同步,但似乎没有任何效果。这是我的损坏代码:

结果,一些数据卡在某处的流缓冲区中,当我知道它应该是 43K 左右时,我总是得到一些完整的压缩数据块(16K 或 32K),因为我得到了(有效)输出使用我的 saveGZFile 方法。显然连接 ofstream 关​​闭并正确刷新,但连接 ostringstream 没有。

有什么帮助吗?(这是我的第一个 stackoverflow 问题——帮帮我,伙计们,你们是我唯一的希望!)

0 投票
1 回答
208 浏览

c++ - 序列化嵌套的无序映射

我有一个带有声明的变量,看起来像

我需要将其序列化为一个文件,然后再反序列化。我应该只做一个嵌套循环还是可以用 boost::serialisation 做一些超酷的事情?任何将我指向嵌套声明的帮助将不胜感激。

提前致谢!

0 投票
1 回答
3210 浏览

c++ - 如何序列化共享/弱指针?

我有一个与 QSharedPointers 和 QWeakPointers 连接的复杂对象网络。有没有一种简单的方法可以使用 Boost.Serialization 保存/加载它们?到目前为止,我有这个:

这是行不通的,因为共享指针总是从原始指针构造的,所以他们都认为引用计数是 1。它还立即释放弱指针。

通过一些努力,我可以将类转换为使用boost::shared_ptrboost::weak_ptr. 这会有什么好处吗?

0 投票
1 回答
1448 浏览

c++ - 使用 boost::serialization 时如何刷新文件缓冲区?

我将文件保存在 USB 驱动器上,需要确保它已完全写入以避免损坏,以防 USB 驱动器未正确移除。好吧,我已经做了一些研究,似乎可以通过调用 FlushFileBuffers Win32 函数来实现。但问题是,我正在使用 boost::serialization 进行保存,因此无法访问实际的文件 HANDLE。我想知道刷新文件的正确方法是什么?谢谢!

0 投票
1 回答
2227 浏览

c++ - 为什么 boost::serialization 不检查 XML 档案中的标签名称?

我开始在 XML 档案上使用 boost::serialization。我可以生成和读取数据,但是当我手动修改 XML 并交换两个标签时,它“失败失败”(即它顺利进行)。

这是一个小的,自我完​​整的例子,展示了我所看到的:

这会将 XML 写入标准输出,其中包含:

现在,我将 main 函数中的所有代码替换为 reader:

当输入前一个输出(输出“XXX 0.0.1”)时,它按预期工作。但是,如果我输入 XML 并更改了“producer”和“producer_version”两行的顺序,它仍然会运行并输出“0.0.1 XXX”。

因此,它无法识别标签没有预期的名称,然后继续。我本来希望它会引发xml_archive_parsing_error异常,如doc中所示。

这里有人有这方面的经验吗?我做错了什么?

0 投票
1 回答
923 浏览

c++ - 管道序列化

我用 C++ 编写了几个模拟程序,并希望用管道连接它们的输出/输入(最好的解决方案可能是使用 C++ 流)。

为此,我想序列化一些对象(例如模拟输出/输入是张量和矩阵)。我应该如何处理这个问题?我在谷歌上搜索了一段时间的序列化+管道,但实际上并没有找到任何关于这个的东西......

关于起点的任何提示?例如,使用提升/序列化与管道交换对象是否容易?一般来说,如果序列化是基于文本的(为了避免舍入错误,我会发送十六进制值而不是十进制),我会很高兴,所以我可以将输出流重定向到文本文件中,将它们拆分等等......我也可以这样可能在不同的程序中编写我的模拟......

谢谢所有的答案!

0 投票
2 回答
1559 浏览

c++ - boost.serialization 和延迟初始化

我需要序列化目录树。我对这种类型没有任何问题:

但是对于带有内容的目录树的序列化,我需要其他类型:

如何在序列化时初始化“std::pair”类型的对象?即读取文件片/计算crc32 summ。

向上

0 投票
1 回答
2443 浏览

boost - 使用 boost 序列化库时出现编译错误

我长期以来一直在努力解决这个错误。以下是我的代码片段。

以下是我得到的编译错误。

请帮帮我。