C ++ Apache Thriftライブラリでは、シリアル化/逆シリアル化のみを使用し、RPCサービスを使用しないことは可能ですか?
このページからわかるように、Javaライブラリを使用することは可能です。ただし、C++ライブラリの同様のクラスは見つかりませんでした。
C ++ Apache Thriftライブラリでは、シリアル化/逆シリアル化のみを使用し、RPCサービスを使用しないことは可能ですか?
このページからわかるように、Javaライブラリを使用することは可能です。ただし、C++ライブラリの同様のクラスは見つかりませんでした。
はい、可能です。Thriftには、この主題に関するドキュメントがありません。まあ、本当に何でも。
ここで私はこれを見つけました:
ネットワーク経由でデータを転送する必要がない場合は、個人的にboost::serializationを使用します。非常に明確な構文であり、JSON、XML、およびバイナリ出力/入力をサポートしています。
C ++では、TFileTransportを使用できます。
boost::shared_ptr<TFileTransport> transport(new TFileTransport(filename));
boost::shared_ptr<TBinaryProtocol> protocol(new TBinaryProtocol(transport));
yourObj.write(protocol.get()); // to write
また
yourObj.read(protocol.get()); // to read
(ファイルに書き込むことなく)単にバイトにシリアル化する場合は、を使用できますTMemoryBuffer
。
boost::shared_ptr<TMemoryBuffer> buffer(new TMemoryBuffer());
boost::shared_ptr<TBinaryProtocol> binaryProtcol(new TBinaryProtocol(buffer));
obj->write(binaryProtcol.get());
obj->read((binaryProtcol.get()));
これは、C++でファイルにシリアル化するためにthriftを使用する方法を示すいくつかの添付コードを含む別のメーリングリストの投稿です。
この質問は少し前に行われたことを私は理解しています。最近、同様のユースケースに遭遇しました(追加の要件があります-シリアル化されたバイトをKafkaクラスターに送信します)。これが、シリアル化と送信のタスクを実行する方法を示す、より完全なコードスニペットを使用した私の答えです。