私は倹約定義を書き、この定義を使用して複数のレコードを 1 つのファイルにシリアル化しました (各レコードの先頭にレコード全体のサイズを追加しました)。それが私がやったことです。
boost::shared_ptr<apache::thrift::transport::TMemoryBuffer> transport(new apache::thrift::transport::TMemoryBuffer);
boost::shared_ptr<apache::thrift::protocol::TBinaryProtocol> protocol(new apache::thrift::protocol::TBinaryProtocol(transport));
myClass->write(protocol.get());
const std::string & data(transport->getBufferAsString());
その後、文字列データをバイナリモードで出力するだけです。ここで、このファイルを再度デシリアライズしたいと思います。ファイルにレコードのみが含まれていれば問題ありませんが、残念ながら複数のファイルを印刷する必要があるため、ファイルに保存したサイズに基づいてオフセットを使用する必要があると思いますレコード自体。ただし、目標を達成するために使用できる例が見つからないようで、公式ドキュメントはかなり不足しています。誰でも私のためのヒントを持っています。情報が不足している場合は、お尋ねください。
詳細情報:
もちろん、 use thrift を使用してデシリアライズしたいと考えています。ただし、1 つのファイルに複数のレコードを含めることができます。例: car-Information を含むthrift-definition ファイルで構造体を定義したとします。これで、複数の car-structs を 1 つの出力ファイルにシリアル化できます。データを追加するだけなので、シリアル化は問題ありません。ただし、逆シリアル化したい場合は、あるレコードの開始位置と次のレコードの開始位置を知る必要があります。それが私の問題です。1 つのレコードの開始点と終了点を thrift に伝える方法がわかりません。私はインターネットを検索しましたが、c++ の例を見つけることができないようです (これまでのところ python の例を入手しましたが、それを c++ に変換することはできません)。1 つのファイルの構造は次のように記述できます。[レコードの長さ 1][レコード 1][レコードの長さ 2][レコード 2][...]
前もって感謝します
マイケル