Heim > Java > javaLernprogramm > Wie implementiert man begrenzte I/O-Funktionen in C für Protokollpuffer?

Wie implementiert man begrenzte I/O-Funktionen in C für Protokollpuffer?

Barbara Streisand
Freigeben: 2024-10-29 13:16:02
Original
292 Leute haben es durchsucht

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

C-Äquivalente für durch Protokollpuffer getrennte E/A-Funktionen in Java

In C gibt es keine direkten Äquivalente zum „getrennten“ I /O-Funktionen, die in Javas Protocol Buffers API Version 2.1.0 eingeführt wurden. Diese Funktionen ermöglichen das Lesen und Schreiben mehrerer Protokollpuffernachrichten mit angehängten Längenpräfixen.

Wire-Format von Java Delimited I/O Functions

Die Java „Delimited“ I/O-Funktionen O-Funktionen verwenden ein Wire-Format, das von Google nicht dokumentiert ist. Der Autor der C- und Java-Protobuf-Bibliotheken hat jedoch inoffizielle Implementierungen ähnlicher Funktionen bereitgestellt:

<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>
Nach dem Login kopieren

Diese Implementierungen stellen sicher, dass die Größenbeschränkung von 64 MB individuell auf jede Nachricht und nicht auf den gesamten Stream angewendet wird. Darüber hinaus nutzen sie Optimierungen, um die Leistung zu verbessern, wenn die Nachrichtengröße relativ klein ist.

Das obige ist der detaillierte Inhalt vonWie implementiert man begrenzte I/O-Funktionen in C für Protokollpuffer?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage