Dans les tampons de protocole, il est souvent nécessaire de lire ou d'écrire plusieurs messages à partir d'un fichier ou d'un flux. Pour garantir une gestion correcte des limites des messages, des préfixes de longueur peuvent être ajoutés avant chaque message. L'API Java, à partir de la version 2.1.0, propose un ensemble de fonctions d'E/S « délimitées » (parseDelimitedFrom, mergeDelimitedFrom et writeDelimitedTo) pour faciliter ce processus.
Équivalents C
Depuis la version 3.3.0 de Protobuf, il existe des équivalents C pour les éléments délimités Fonctions d'E/S trouvées dans l'API Java. Ces fonctions se trouvent dans le fichier d'en-tête suivant :
google/protobuf/util/delimited_message_util.h
Les fonctions sont les suivantes :
bool writeDelimitedTo(const google::protobuf::MessageLite& message, google::protobuf::io::ZeroCopyOutputStream* rawOutput); bool readDelimitedFrom(google::protobuf::io::ZeroCopyInputStream* rawInput, google::protobuf::MessageLite* message);
Mise en œuvre
Les éléments suivants des implémentations optimisées des fonctions d'E/S délimitées pour C ont été fournies par l'auteur des bibliothèques protobuf C et Java. Ils résolvent certains problèmes rencontrés dans des implémentations alternatives :
bool writeDelimitedTo(const google::protobuf::MessageLite& message, google::protobuf::io::ZeroCopyOutputStream* rawOutput) { // ... } bool readDelimitedFrom(google::protobuf::io::ZeroCopyInputStream* rawInput, google::protobuf::MessageLite* message) { // ... }
Ces implémentations incluent des optimisations qui minimisent les copies et évitent les erreurs potentielles après le traitement de grandes quantités de données. De plus, contrairement à d'autres implémentations, ces fonctions appliquent une limite de taille par message plutôt que sur l'ensemble du flux.
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!