プロトコル バッファーでは、ファイルまたはストリームから複数のメッセージを読み書きすることが必要になることがよくあります。メッセージ境界を適切に処理するために、各メッセージの前に長さのプレフィックスを追加できます。バージョン 2.1.0 以降の Java API では、このプロセスを容易にする一連の「区切り付き」I/O 関数 (parseDelimitedFrom、mergeDelimitedFrom、および writeDelimitedTo) が提供されています。
C 相当
Protobuf バージョン 3.3.0 では、区切り文字で区切られた I/O に相当する C 言語があります。 Java API にある関数。これらの関数は次のヘッダー ファイルにあります。
google/protobuf/util/delimited_message_util.h
関数は次のとおりです。
bool writeDelimitedTo(const google::protobuf::MessageLite& message, google::protobuf::io::ZeroCopyOutputStream* rawOutput); bool readDelimitedFrom(google::protobuf::io::ZeroCopyInputStream* rawInput, google::protobuf::MessageLite* message);
実装
以下C 用の区切り文字付き I/O 関数の最適化された実装は、C および Java の protobuf ライブラリの作成者によって提供されました。これらは、代替実装で見つかったいくつかの問題に対処しています:
bool writeDelimitedTo(const google::protobuf::MessageLite& message, google::protobuf::io::ZeroCopyOutputStream* rawOutput) { // ... } bool readDelimitedFrom(google::protobuf::io::ZeroCopyInputStream* rawInput, google::protobuf::MessageLite* message) { // ... }
これらの実装には、コピーを最小限に抑え、大量のデータを処理した後の潜在的なエラーを回避する最適化が含まれています。また、他の実装とは異なり、これらの関数はストリーム全体ではなくメッセージごとにサイズ制限を適用します。
以上がC プロトコル バッファで区切り文字付き I/O 機能を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。