使用boost库进行序列化

时间:2016-11-01 00:47:04

标签: c++ serialization boost

我正在尝试使用boost库来序列化std :: map,以便可以将其存储在文件中。但是我有这么奇怪的行为(我猜)。所以这是我的代码:

#include <map>
#include <fstream>
#include <iostream>
#include <bitset>

#include <boost/serialization/map.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>

std::map<int,int> map = {{65,2}, {69,1}, {75,1} ,{77,1}, {82,1}, {84,2}, {89,2}};

void saveMapToFile(std::ofstream& f);

int main()
{
    std::ofstream f("test.txt", std::ios::binary);

    saveMapToFile(f);

    std::cout << "position: " << f.tellp() << std::endl;
}

void saveMapToFile(std::ofstream& f)
{
    std::cout << "position : " << f.tellp() << std::endl;

    boost::archive::text_oarchive oarch(f);

    std::cout << "position : " << f.tellp() << std::endl;

    oarch << map;

    std::cout << "position : " << f.tellp() << std::endl;
}

以上是代码的输出:

position : 0
position : 28
position : 75
position: 76

那么有人可以向我解释这里发生了什么吗?为什么在不同之外的地图(功能)中进行定位?我没有做任何额外的操作,但是指针再进一步......我错过了什么?感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我不明白为什么你会对存档格式的实现做出假设。

Archives写标题,可以编写“预告片”(想想XML档案)。

oarch的析构函数写了另一个字节,完成了流。它可以是哨兵,校验和,换行等。