我正在序列化来自项目的两个不同分支的一些数据。使用 .以文本存档形式输出数据boost::serialization
。由于要在两个序列化文件之间进行差异,因此我还在每个序列化部分之间的序列化文件中添加了一些调试消息,以便更好地查看可能出现输出差异的点。
这是我当前使用的代码的广泛概述:
std::ofstream ofs("./SomeFile.txt"); // for brevity's sake, no actual path used
{
boost::archive::text_oarchive oa(ofs);
std::string debug_str;
debug_str = "\n\nPart 1\n";
oa & debug_str;
// ... some other serialized parts ...
debug_str = "\n\nPart 145\n";
oa << debug_str;
}
您会注意到,我首先认为使用的运算符 ( &
vs <<
) 对输出产生了影响,但事实并非如此,我得到以下文本文件:
22 serialization::archive 7 9 [CRLF]
[CRLF]
Part 1 [CRLF]
11 [CRLF]
[CRLF]
Part 145 [CRLF]
该22 serialization::archive 7
部分是一个标准的 Boost 序列化标头,用于识别我猜的存档类型。然后是我想删除的部分,即9
——经过一番追逐后,我发现这9
是"\n\nPart1\n"
字符串的长度!
这是预期的行为还是有办法绕过这个输出?在其他实际记录的情况下,没有明显使用其他此类“控制代码”、标记长度等。
添加一些调试输出会很有用,但是由于所述调试字符串的长度可能不同(因为在其中一个分支上发生了大量重构),因此差异会产生一些误报。
任何想法将不胜感激,谢谢!