我想在一个文件中保留一堆简单的结构(目前每个结构只有 3 个整数),并且能够在任何给定时间读回其中一个结构。
作为第一步,我试图将它们输出到一个文件中,然后使用 boost::serialization 将它们读回。目前我正在这样做,它崩溃了:
std::array<Patch, 3> outPatches;
outPatches[0].ZOrigin = 0;
outPatches[0].XOrigin = 0;
outPatches[0].Resolution = 64;
outPatches[1].ZOrigin = 1;
outPatches[1].XOrigin = 5;
outPatches[1].Resolution = 3;
outPatches[2].ZOrigin = 123;
outPatches[2].XOrigin = 546;
outPatches[2].Resolution = 6;
std::ofstream ofs("testing.sss", std::ios::binary);
for (auto const& patch : outPatches)
{
std::cout << "start archive: " << ofs.tellp() << std::endl;
{
boost::archive::binary_oarchive oa(ofs);
std::cout << "start patch: " << ofs.tellp() << std::endl;
oa << patch;
}
}
ofs.close();
std::array<Patch, 3> inPatches;
std::ifstream ifs("testing.sss", std::ios::binary);
for (auto& patch : inPatches)
{
std::cout << "start archive: " << ifs.tellg() << std::endl;
{
boost::archive::binary_iarchive ia(ifs); // <-- crash here on second patch
std::cout << "start patch: " << ifs.tellg() << std::endl;
ia >> patch;
}
}
ifs.close();
for (int i = 0; i != 3; ++i)
std::cout << "check: " << (inPatches[i] == outPatches[i]) << std::endl;
我正计划使用 tell 对每个结构的位置进行索引,并在加载时寻求跳到该结构。这是一个合理的方法吗?除了基础知识之外,我对流的了解不多。
我尝试将所有补丁放在一个 o/iarchive 中,这样可以很好地按顺序读取所有内容。但是,在流中搜索不起作用。
我找到了这个,这可能是我想要的,但我不知道它在做什么或如何使用它,或者它是否适用于 boost::serialization: read part of a file with iostreams
如有必要,我可能愿意切换到另一种序列化方法,因为我对此还没有走得太远。
编辑 3:将编辑 1 和 2 移至答案。