Heim >Java >javaLernprogramm >Wie implementiert man begrenzte I/O-Funktionen in C für Protokollpuffer?
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>
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!