私は他人によって書かれたプロジェクトのためのコードを読んでいます。プロジェクトの主なタスクは、大きな構造化テキストファイル(.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++でオブジェクトシリアル化の一部になることができますか?
より速いオブジェクトロードのためのC++のオブジェクトシリアル化の主な目的は?
いいえ。シリアル化の最も重要な目的は、プログラムの状態をファイルシステムに格納できる形式に変換すること、またはネットワーク間で通信できる形式で、シリアル化されます。多くの場合、その目的は別のプログラムが逆直列化を行うためのものです。時々、逆シリアサイアは同じプログラムの別のインスタンスです。
DE-Serializationの速度は、特定の直列化フォーマットが良いものであるかどうかをゲージするために使用できる1つのメトリックです。あなたがしたことをすばやく元に戻す能力はそうではありませんそもそもあなたがそれをする理由。
それらをバイナリベクトルまたはマップに変換することの利点は何ですか?
上記に言及すると、シリアル化の利点は、シリアル化されたデータをファイルシステムに格納するか、ネットワーク経由で送信する機能です。
プレーンテキストファイルとバイナリファイル間の利点は何ですか?
テキストの直列化フォーマットの長所:
バイナリシリアル化フォーマットの長所: