刚开始熟悉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
),则代码会通过。
从表面上看,这几乎是不可能的。更有可能的是,我错过了一些明显的东西。
最后,使用1.53。
答案 0 :(得分:3)
您的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);