4

部分的なシリアル化をサポートする既存の優れた C++ シリアル化ライブラリはありますか?

「部分的なシリアル化」とは、3 つの特定のメンバーの値を保存し、後でその保存されたコピーを別のインスタンスに適用できるようにすることを意味します。これらの 3 つのメンバーのみを更新し、他のメンバーはそのままにしておきます。

これは、ネットワークを介してデータを同期するのに役立ちます。クライアントとサーバーにオブジェクトがあり、サーバーでメンバーが変更されたときに、そのメンバーとそのメンバーのみの更新された値を含むメッセージをクライアントに送信したいとします。オブジェクト全体のコピーをネットワーク経由で送信したくありません。

boost::serialization一見すると、すべてまたはまったくサポートしていないように見えます。

編集: 最初にこれを書いてから 3 年後、私はそれを振り返って、自分自身に言います。boost::serialization を使用すると、保存するメンバーと保存しないメンバーを定義できるため、説明したように「部分的なシリアル化」をサポートします。さらに、C++ にはリフレクション シリアライゼーション ライブラリがないため、保存する各メンバーを明示的に指定する必要があります。ただし、ソース ファイルを解析するための何らかの外部ツールが付属している場合や、C++ コードの生成に使用される別の入力ファイル形式がある場合を除きます (例: Protocol Buffers の機能)。これを書いたとき、私は概念的に混乱していたに違いないと思います。

4

2 に答える 2

4

ここでシリアライゼーションを探しているわけではありません。

シリアル化とは、オブジェクトを保存してから、バイト ストリームから再作成することです。ビデオ ゲームの保存や Web サーバーのセッション コンテキストを考えてみてください。

ここで必要なのはメッセージです。そのためには、 Google の FlatBuffersが便利です。すべての単一フィールドを含むメッセージをオプションとして指定し、メッセージの受信時に、存在するフィールドでオブジェクトを更新し、他のフィールドはそのままにしておきます。

FlatBuffers の優れた点は、ゼロコストの解析ステップに加えて、前方互換性と後方互換性、およびテキストとバイナリのエンコーディング (テキストはデバッグに最適で、バイナリは純粋なパフォーマンスに適しています) を適切に処理することです。

また、メッセージをどこかに保存し、それを検査するために html GUI を一緒にスローしたい場合は、別の言語 (Python や Ruby など) でメッセージをデコードすることもできます!

于 2009-11-28T13:55:43.483 に答える
0

私はそれらに精通していませんが、Google の Protocol Buffers も参照してください。

于 2009-11-27T19:54:03.600 に答える