0

私はすでに検索を試みたのでここで尋ねていますが、これが存在するかどうか、そしてそれらの名前が何であるかはわかりません。

私はカスタムパターンでこれを意味することを説明し始めます:foo、bar、booタイプのオブジェクトまたはデータをシリアル化する必要があると仮定します。通常、ライブラリはユーザーのためにこれを非常に簡単な方法で処理します。シリアル化プロセスなので、最初にすべてのfooをシリアル化すると、ファイルの「先頭」に書き込まれ、すべてのbarとbooはfooの後にあります。

ファイルの順序を維持し、カスタムパターンに基づいて整理したいのですが、Boostでこれは可能ですか?この機能を提供するセクションはどれですか?

2つ目は、最初の値と厳密に関連しています。また、シリアル化されたバイナリファイルにアクセスして、以前のすべての値を解析して読み取り、関心のある値だけを抽出する必要がないようにします。 、メモリアドレスに基づいて動作し、他のすべてのアドレスを解析することなくランダムアクセスを提供するRAMのようなものです。

ありがとう。

4

1 に答える 1

1

最初の問題について:Boostシリアル化ライブラリは、オブジェクトをシリアル化された形式に変換した後に何が起こるかについては不可知論者です。これは、入力ストリームと出力ストリームを使用して行われます。ファイルはまさにそれです-fostream/fistream。ただし、他のタイプのストリームの場合、あなたが話す順序/パターンは意味がありません。シリアル化されたオブジェクトをネットワーク経由で送信していると想像してください。ライブラリは、オブジェクトの順序を並べ替える必要があることを認識できず、実際、送信された後はそれを実行できません。このため、それはあなたが探しているものをサポートしていません。

できることは、オブジェクトのシリアル化されたバージョンをキャッシュして、ファイルに書き出すように指示する前にそれらをメモリに配置するラッパーを作成することです。または、ファイルを操作しているので、tellg後でファイル内の適切な場所と追加(このアプローチでは、ファイルに書き込んだオブジェクトの場所を保存する必要があります)。

2つ目は、ランダムアクセスファイルの読み取りです。オブジェクトがメモリ内のどこにあるかを正確に知る必要があります。ファイルの構造が変更されないことがわかっている場合はseekg、ファイルストリームを処理してから、逆シリアル化のためにブーストすることができます。ただし、ファイル構造が変更される場合でも、ファイル内のオブジェクトの場所を知る必要があります。ファイルを解析して見つけたくない場合は、シリアル化中にファイルをどこかに保存する必要があります。たとえば、ファイルの先頭にある種のオブジェクトのレジストリを維持できます。それでも解析する必要がありますが、それは単純な[Object identifier]-[location in file]種類のものである必要があります。

于 2012-11-14T15:54:38.017 に答える