Heim > Backend-Entwicklung > C++ > C-Protokoll-Puffer-getrennte E/A: Gibt es Java-äquivalente Funktionen?

C-Protokoll-Puffer-getrennte E/A: Gibt es Java-äquivalente Funktionen?

Barbara Streisand
Freigeben: 2024-12-05 00:32:12
Original
205 Leute haben es durchsucht

C   Protocol Buffer Delimited I/O: Are There Java-Equivalent Functions?

Protocol Buffers Delimited I/O Functions: C Equivalents?

In einem Versuch, mehrere Protocol Buffers-Nachrichten aus Dateien zu lesen und zu schreiben, die sowohl C als auch Java verwenden, ist dies der Fall Es wurde beobachtet, dass Java zu diesem Zweck eine Reihe von „getrennten“ I/O-Funktionen bereitstellt. Es bleibt jedoch ungewiss, ob C eine ähnliche Funktionalität bietet.

Die Java-API-Funktionen sind:

  • parseDelimitedFrom
  • mergeDelimitedFrom
  • writeDelimitedTo

C Äquivalente

Ab Version 3.3.0 hat Google dieses Problem behoben, indem die folgenden C-Äquivalente in google/protobuf/util/delimited_message_util.h eingeführt wurden:

bool writeDelimitedTo(
    const google::protobuf::MessageLite& message,
    google::protobuf::io::ZeroCopyOutputStream* rawOutput) {
  // Code to write delimited messages
}

bool readDelimitedFrom(
    google::protobuf::io::ZeroCopyInputStream* rawInput,
    google::protobuf::MessageLite* message) {
  // Code to read delimited messages
}
Nach dem Login kopieren

Wire-Format für Java-Größe Präfixe

Für diejenigen, die die mit Größenpräfixen versehenen Nachrichten in C analysieren möchten, ohne die offizielle Bibliothek zu verwenden, ist die Das Wire-Format lautet wie folgt:

  1. Die Größe der Nachricht wird als 32-Bit-Ganzzahl variabler Länge dargestellt.
  2. Ein einzelnes Byte wird nach der Größe hinzugefügt, um die Abwärtskompatibilität sicherzustellen .
  3. Die Nachrichtendaten werden nach der Größe und Kompatibilität angehängt Byte.

Optimierungen

Die bereitgestellten C-Implementierungen enthalten Optimierungen, die in anderen Antworten fehlten. Diese Optimierungen stellen sicher, dass die Funktionen:

  • nicht nach 64 MB Eingabe fehlschlagen.
  • das 64-MB-Limit für jede einzelne Nachricht erzwingen.
  • Verwenden Sie eine schnellere Direkt- to-array serialization path, wenn möglich.

Das obige ist der detaillierte Inhalt vonC-Protokoll-Puffer-getrennte E/A: Gibt es Java-äquivalente Funktionen?. 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