4

オブジェクトを取り込んでバイナリストリームに変換し、ファイルに保存するシリアル化クラスを実装したいと思います。後で、オブジェクトをファイルから再構築する必要があります。

この機能はC#のBinaryFormatterによって提供されますが、独自のSerializationクラスを最初から設計したいと思います。

誰かがいくつかのリソースを指すことができますか?

前もって感謝します

4

4 に答える 4

5

私はあなたに否定的な答えを与えたいと思います。あまり役に立ちませんが、それでも役立つ可能性があります。

私は数年間ブーストシリアル化を使用してきましたが、それは私の会社の最大の戦略的ミスの1つでした。それは非常に大きな出力を生成し、それは非常に遅く、たくさんの依存関係を伝播してすべてをコンパイルするのを不可能なほど遅くします、そしてあなたが既存のシリアル化されたフォーマットを持っているのでそれから抜け出すのは難しいです。さらに、コンパイラによって動作が異なるため、VS2005から2010にアップグレードすると、実際には互換性レイヤーを作成することになります。これも、コードを理解するのが非常に難しいためです。

于 2012-09-19T21:14:08.283 に答える
3

C++シリアル化の2つのソリューションは次のとおりです。

私は個人的に最初のものだけを使用した経験があり、実際にはテキストベースのシリアライザーのみを使用しましたが、s11nで使用するバイナリシリアライザーを定義するのは簡単です。

于 2012-09-19T19:29:04.587 に答える
2

私はしばらくの間boost::serializationライブラリを使用していて、それはとても良いと思います。次のようなシリアル化コードを作成する必要があります。

class X {
  private:
    std::string value_;
  public:
    template void serialize(Archive &ar, const unsigned int version) {
       ar & value_;
     };
 }

逆シリアル化コードを作成する必要はありません(そのため、&演算子を使用しました)。ただし、必要に応じて、<<および>>演算子を使用することもできます。

また、変更なしでクラスのシリアル化メソッドを作成することもできます(例:ライブラリからのオブジェクトをシリアル化する必要がある場合)。この場合、次のようなことを行う必要があります。

namespace boost { namespace serialization {
       template
       void serialize(Archive &ar, X &x const unsigned int version) {
                    ar & x.getValue();
       };
    }}
于 2012-09-19T19:50:31.537 に答える
0

C++ミドルウェアライターが興味深いかもしれません。Boostのシリアル化ライブラリよりもパフォーマンス上の利点があります。また、シリアル化関数の作成を自動化します。

于 2012-09-19T23:40:41.937 に答える