【发布时间】:2020-10-03 10:24:30
【问题描述】:
我编写了一个用于增强/序列化的 C++ 程序。我已经在二进制流上写入和读取项目。但问题是,我想改变一些项目的位置。
例子:
void write(...){
if(!file_streamer_) {
...
a_ = new boost::archive::binary_oarchive(*file_streamer_);
}
for(...){
(*oa_) & obj[i] ;}
// calculating the some properties of objects (long x long y long z)
// and add them to stream
(*oa_) & x;
(*oa_) & y;
(*oa_) & z;
}
// read
void read(...){
ia_=new boost::archive::binary_iarchive(*file_streamer_in_);
std::streampos archive_offset = file_streamer_in_->tellg();
std::streampos stream_end = file_streamer_in_->seekg(0, std::ios_base::end).tellg();
file_streamer_in_->seekg(archive_offset);
while (file_streamer_in_->tellg() < stream_end){
//read objects
...
}
}
那是我的二进制流:
obj_1 obj_2 obj_3 obj_4 obj_5 x y z
但我想这样改变:
x y z obj_1 obj_2 obj_3 obj_4 obj_5
如何将最后一部分添加到流的开头? 提前致谢。
【问题讨论】:
-
将行
(*oa_) & x; (*oa_) & y; (*oa_) & z;放在for循环之前有什么问题?如果您想先流式传输这三个,则先传输这三个。 -
我可能无法解释,但你可以相信我,我不能先添加它们。
-
不,我不敢相信。 XY problem 的可能性更大。
-
“我可能无法解释” 那么这就是你的确切问题:你正在做一些事情,但你不知道为什么要这样做。听听你的小疑问。在继续之前,请确保您清除了所有此类疑问。想象有人在半夜叫醒你。如果你不能解释它,你就不应该这样做。你不能做任何这些,也不能为每一件小事提供详细的推理。您在不理解的情况下“凭感觉编程”。结局总是很糟糕。没有其他方式可以结束。而且你现在的情况比较典型。
标签: c++ serialization boost