8

vector と map コンテナをシリアル化し、その値を cout で出力しようとしました。ただ、ブーストの出力の意味が分かりづらいです。私のコードは次のようになります。

#include <iostream>
#include <boost/serialization/vector.hpp>   
#include <boost/serialization/map.hpp>  
#include <boost/assign.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <sstream>
#include <fstream>

using namespace std;

int main()
{
    vector<int> v = boost::assign::list_of(1)(3)(5);
    map<int, string> m = boost::assign::map_list_of(1,"one")(2,"two");

    std::stringstream ss;
    boost::archive::text_oarchive oa(ss);
    oa<<v<<m;   

    vector<int> v_;
    map<int,string> m_;
    boost::archive::text_iarchive ia(ss);
    ia>>v_>>m_;
    boost::archive::text_oarchive ib(cout);
    ib<<v_<<m_;
    return 0;
}

出力は次のようになります。

22 serialization::archive 9 3 0 1 3 5 0 0 2 0 0 0 1 3 one 2 3 two

値 1 3 5 の前の数字 9 3 0 の意味は何ですか? 0 0 2 0 0 0 はどうですか?「1」と「1」の間の「3」は 3 文字という意味ですか?

4

3 に答える 3

8

マップ内のいくつかのゼロ (おそらくバージョン番号または追跡レベル) についてはわかりませんが、残りについては:

22 (length of the signature)
serialization::archive (signature)
9 (archive version, 10 on boost 1.53)
3 (vector size)
0 (item version)
1 3 5 (vector items)
0 (map class tracking level ?)
0 (map class version ?)
2 (map size)
0 (item class tracking _level ?)
0 (item class version ?)
0 (item version)
1 (key) 3 (value length) one (value)
2 (key) 3 (value length) two (value)

テキスト出力の内容と形式は Boost の内部業務であり、将来の Boost のリビジョンで変更される可能性があるため、アプリケーションは内部アーカイブの内容に依存すべきではないことに注意してください。

于 2013-04-22T12:05:04.130 に答える