Équivalents C pour les fonctions d'E/S délimitées des tampons de protocole en Java
En C, il n'y a pas d'équivalents directs au I "Délimité" Fonctions /O introduites dans l'API Protocol Buffers de Java version 2.1.0. Ces fonctions permettent de lire et d'écrire plusieurs messages de tampons de protocole avec des préfixes de longueur attachés.
Format filaire des fonctions d'E/S délimitées Java
Les E/S "délimitées" Java Les fonctions O utilisent un format filaire qui n'est pas documenté par Google. Cependant, l'auteur des bibliothèques protobuf C et Java a fourni des implémentations non officielles de fonctions similaires :
<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>
Ces implémentations garantissent que la limite de taille de 64 Mo est appliquée individuellement à chaque message et non à l'ensemble du flux. De plus, ils utilisent des optimisations pour améliorer les performances lorsque la taille du message est relativement petite.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!