ホームページ > Java > &#&チュートリアル > プロトコルバッファ用に区切り文字付きI/O関数をCで実装するにはどうすればよいですか?

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

Barbara Streisand
リリース: 2024-10-29 13:16:02
オリジナル
292 人が閲覧しました

How to Implement Delimited I/O Functions in C   for Protocol Buffers?

C での Java のプロトコル バッファ区切り I/O 関数と同等

C では、「区切り付き」I に直接相当する関数はありません。 Java のプロトコル バッファー API バージョン 2.1.0 で導入された /O 関数。これらの関数により、長さのプレフィックスが付加された複数のプロトコル バッファ メッセージの読み書きが可能になります。

Java 区切り文字付き I/O 関数のワイヤ形式

Java の「区切り文字付き」I/ O 関数は、Google によって文書化されていないワイヤ形式を使用します。ただし、C および Java の protobuf ライブラリの作成者は、同様の関数の非公式実装を提供しています。

<code class="cpp">bool writeDelimitedTo(
    const google::protobuf::MessageLite& message,
    google::protobuf::io::ZeroCopyOutputStream* rawOutput) {

  // Write the size.
  const int size = message.ByteSize();
  output.WriteVarint32(size);

  // Serialize the message.
  uint8_t* buffer = output.GetDirectBufferForNBytesAndAdvance(size);
  if (buffer != NULL) {
    message.SerializeWithCachedSizesToArray(buffer);
  } else {
    message.SerializeWithCachedSizes(&output);
  }

  return true;
}

bool readDelimitedFrom(
    google::protobuf::io::ZeroCopyInputStream* rawInput,
    google::protobuf::MessageLite* message) {

  // Read the size.
  uint32_t size;
  if (!input.ReadVarint32(&size)) return false;

  // Limit the stream to the size of the message.
  google::protobuf::io::CodedInputStream::Limit limit =
      input.PushLimit(size);

  // Parse the message.
  if (!message->MergeFromCodedStream(&input)) return false;

  // Verify that the entire message was consumed.
  if (!input.ConsumedEntireMessage()) return false;

  // Release the limit.
  input.PopLimit(limit);

  return true;
}</code>
ログイン後にコピー

これらの実装により、64 MB のサイズ制限がストリーム全体ではなく各メッセージに個別に適用されることが保証されます。さらに、メッセージ サイズが比較的小さい場合、最適化を利用してパフォーマンスを向上させます。

以上がプロトコルバッファ用に区切り文字付きI/O関数をCで実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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