将std::vector序列化为Boost二进制存档时,数据相关的失败
Data-Dependent Failure When Serializing std::vector to Boost Binary Archive
刚刚开始熟悉Boost序列化库。我被一个数据相关的故障难住了:
下面的代码使用input stream error
#include <cassert>
#include <vector>
#include <iostream>
#include <algorithm>
#include "boost/serialization/vector.hpp"
#include "boost/archive/text_iarchive.hpp"
#include "boost/archive/text_oarchive.hpp"
#include "boost/archive/binary_iarchive.hpp"
#include "boost/archive/binary_oarchive.hpp"
int main (void) {
std::vector<int> v1(100);
std::generate(v1.begin(), v1.end(), &std::rand);
{
std::ofstream ofs("test.out");
boost::archive::binary_oarchive oa(ofs);
oa << v1;
}
{
std::vector<int> v2;
std::ifstream ifs("test.out");
boost::archive::binary_iarchive ia(ifs);
ia >> v2;
assert(v1 == v2);
}
return 0;
}
如果我使用boost::archive::text_[i/o]archive
,代码通过。
如果我注释掉std::generate
行(仍然使用binary_[i/o]archive
),代码通过。
这是可能的,你的fstream是转换出现在二进制流的0x0a
字节到你的系统行结束序列,而不是0x0a
。尝试用std::ios::binary
模式打开文件,例如
std::ofstream ofs("test.out", std::ios::out | std::ios::binary);
和
std::ifstream ifs("test.out", std::ios::in | std::ios::binary);
相关文章:
- PyTorch C++将数据转换为张量失败
- HDF5 简单读取数据集失败
- C++ TCP 套接字通信 - 连接按预期工作,几秒钟后失败,没有收到新数据,read() 和 recv() 块
- 创建服务失败0x6f7存根收到错误数据
- 元数据操作失败LNK2022错误 (8013118D):重复类型中的布局信息不一致 (选择设备参数):(0x020002
- 获取剪贴板数据(CF_HDROP)在剪切和粘贴中失败
- static_assert 在使用 boost 反序列化二进制数据时失败"typex::value"失败
- 如何防止ptr_map在插入失败时释放数据
- 从文件中提取的数据中的C 搜索字符串失败
- Qt命令行编译在链接器阶段失败,出现垃圾NXCOMPAT数据
- 为什么返回的 FILE* 在 popen() 中的命令失败时保留数据
- 为什么添加静态数据成员会导致链接器失败
- MFC对话框数据验证失败时还原数据
- libcurl错误失败的写作已接收到磁盘/应用程序的数据
- 当我更改着色器中与这些统一无关的代码行时,向着色器(GLSL)发送数据失败
- 为什么ASIO同步写入newtork第二次发送数据失败
- C++使用libssh-libary通过SSH检索数据失败
- 阅读训练数据失败:tagger.cpp (393) crf++
- 在 boost 中序列化二进制数据失败,并出现"签名无效"错误
- Dev-Cpp中读取文件数据失败