我使用 Boost 将多个对象序列化为二进制存档。
当从 a 读回这些对象时binary_iarchive
,有没有办法知道存档中有多少对象,或者只是检测存档结尾的方法?
我发现的唯一方法是使用 try-catch 来检测流异常。
提前致谢。
我可以想到很多方法:
将 STL 容器序列化到您的存档或从您的存档序列化 STL 容器(请参阅文档 http://www.boost.org/doc/libs/release/libs/serialization/doc/tutorial.html#stl)。存档将自动跟踪容器中有多少对象。
在序列化对象之前序列化计数变量。当读回你的对象时,你会事先知道你期望读回多少个对象。
您可以让最后一个对象具有特殊值,该值充当一种指示对象列表末尾的哨兵。也许你可以添加一个isLast
对象的成员函数。
这不是很漂亮,但是您可以在存档旁边有一个单独的“索引文件”,用于存储存档中的对象数量。
Use the tellp
底层流对象的位置来检测是否位于文件末尾:
示例(只是一个草图,未经测试):
std::streampos archiveOffset = stream.tellg();
std::streampos streamEnd = stream.seekg(0, std::ios_base::end).tellg();
stream.seekg(archiveOffset);
while (stream.tellp() < streamEnd)
{
// Deserialize objects
}
这可能不适用于 XML 存档。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)