web-dev-qa-db-ja.com

より速いオブジェクトロードのためのC ++のオブジェクトシリアル化の主な目的は?

私は他人によって書かれたプロジェクトのためのコードを読んでいます。プロジェクトの主なタスクは、大きな構造化テキストファイル(.txt)から8列の大きな構造化テキストファイル(.txt)から、多くのメソッドと変数を持つナレッジベースオブジェクトに読み取ります。ナレッジベースオブジェクトはバイナリファイルに出力されます。たとえば、KnowledgeBaseクラスには少なくともこれら2つの変数があります。

map<string, pair<string, string>> key_info
vector<ObjectInfo> objects
...
 _

GDBでコードを追跡するときは、これらの変数がわかりやすいです。その後、そのようなベクトルとマッピングをバイナリ形に変換しているようです。上記の2つの変数には、対応するバイナリ形式があります。

BinaryKeyInfo *bkeys
BinaryObjectInfo *bObjects
 _

後でバイナリファイルに出力すると、そのようなコードがあります。

fwrite((char*)(&wcount),sizeof(int32_t),1,output);
fwrite((char*)bkeys,sizeof(KeyInfo_t),wcount,output);
 _

元のナレッジベースからバイナリへの変換コードは複雑です。私の質問は、この変換の主な目的は何ですか?プレーンテキストファイルよりもバイナリファイルをメモリにロードするためのものですか?プレーンテキストファイルは大きいです。私は、オブジェクトのシリアル化が主にネット上のオブジェクトを送信するためのものであることを学びましたが、ここでの目的はそれのためのものではありません。データロードとメモリ保存を高速化するためのものです。 C++でオブジェクトシリアル化の一部になることができますか?

1
marlon

より速いオブジェクトロードのためのC++のオブジェクトシリアル化の主な目的は?

いいえ。シリアル化の最も重要な目的は、プログラムの状態をファイルシステムに格納できる形式に変換すること、またはネットワーク間で通信できる形式で、シリアル化されます。多くの場合、その目的は別のプログラムが逆直列化を行うためのものです。時々、逆シリアサイアは同じプログラムの別のインスタンスです。

DE-Serializationの速度は、特定の直列化フォーマットが良いものであるかどうかをゲージするために使用できる1つのメトリックです。あなたがしたことをすばやく元に戻す能力はそうではありませんそもそもあなたがそれをする理由。

それらをバイナリベクトルまたはマップに変換することの利点は何ですか?

上記に言及すると、シリアル化の利点は、シリアル化されたデータをファイルシステムに格納するか、ネットワーク経由で送信する機能です。

プレーンテキストファイルとバイナリファイル間の利点は何ですか?

テキストの直列化フォーマットの長所:

  • 人間はプレーンテキストを読み書きすることができます。人間は一般にバイナリファイルを読み書きすることも書き込むことはできません。
  • 一般的に、同じことを達成するバイナリ形式の除去/シリアライザを実装することであるよりも、異なるコンピュータ間で動作するような方法で、一般的にプレーンテキスト形式のシリアライザを実装する方が簡単です。

バイナリシリアル化フォーマットの長所:

  • 通常は早く、保管や帯域幅が少なくなります。
  • 異なるシステム間の通信が不要な場合は実装が容易になる可能性があります。これは通常非常に簡単な場合にのみケースのみです。 (さらに、通常はクロスシステムの互換性の必要性がありますが、まだ実現されていなくても)。
4
eerorika