提升序列化文件结尾

Shn*_*poo 8 boost eof boost-serialization

我使用Boost将多个对象序列化为二进制存档.从a读回那些对象时binary_iarchive,有没有办法知道存档中有多少对象,或者只是一种检测存档结束的方法?

我找到的唯一方法是使用try-catch来检测流异常.提前致谢.

Emi*_*ier 6

我可以想到一些方法:

  1. 将STL容器序列化到存档中(参见文档).存档将自动跟踪容器中有多少对象.

  2. 在序列化对象之前序列化count变量.回读你的对象时,你会事先知道你希望读回多少个对象.

  3. 您可以让最后一个对象具有一个特殊值,该值充当一种指示对象列表末尾的标记.也许您可以isLast向对象添加成员函数.

  4. 这不是很漂亮,但您可以在存档旁边有一个单独的"索引文件",用于存储存档中的对象数.

  5. 使用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
}
Run Code Online (Sandbox Code Playgroud)

这可能不适用于XML归档.