Rumah >Java >javaTutorial >Bagaimana untuk Melaksanakan Fungsi I/O Terhad dalam C untuk Penampan Protokol?

Bagaimana untuk Melaksanakan Fungsi I/O Terhad dalam C untuk Penampan Protokol?

Barbara Streisand
Barbara Streisandasal
2024-10-29 13:16:02292semak imbas

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

C Equivalents for Protocol Buffers Delimited I/O Functions in Java

Dalam C , tiada persamaan langsung dengan "Disempit" I /O fungsi yang diperkenalkan dalam Java's Protocol Buffers API versi 2.1.0. Fungsi ini membenarkan untuk membaca dan menulis berbilang mesej Penampan Protokol dengan awalan panjang dilampirkan.

Format Wayar bagi Fungsi I/O Terhad Java

Java "Terhad" I/ Fungsi O menggunakan format wayar yang tidak didokumenkan oleh Google. Walau bagaimanapun, pengarang perpustakaan protobuf C dan Java telah menyediakan pelaksanaan tidak rasmi bagi fungsi serupa:

<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>

Pelaksanaan ini memastikan bahawa had saiz 64MB digunakan secara individu pada setiap mesej dan bukan pada keseluruhan strim. Selain itu, mereka menggunakan pengoptimuman untuk meningkatkan prestasi apabila saiz mesej agak kecil.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Fungsi I/O Terhad dalam C untuk Penampan Protokol?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn