ホームページ > バックエンド開発 > C++ > C プロトコル バッファで区切り文字付き I/O 機能を実現するにはどうすればよいですか?

C プロトコル バッファで区切り文字付き I/O 機能を実現するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-29 09:24:15
オリジナル
649 人が閲覧しました

How to Achieve Delimited I/O Functionality in C   Protocol Buffers?

C で同等の区切り付き I/O 機能

プロトコル バッファーでは、ファイルまたはストリームから複数のメッセージを読み書きすることが必要になることがよくあります。メッセージ境界を適切に処理するために、各メッセージの前に長さのプレフィックスを追加できます。バージョン 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート