Maison > développement back-end > C++ > Comment obtenir une fonctionnalité d'E/S délimitée dans les tampons du protocole C ?

Comment obtenir une fonctionnalité d'E/S délimitée dans les tampons du protocole C ?

Barbara Streisand
Libérer: 2024-12-29 09:24:15
original
649 Les gens l'ont consulté

How to Achieve Delimited I/O Functionality in C   Protocol Buffers?

Équivalences de fonctionnalités d'E/S délimitées en C

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
Copier après la connexion

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);
Copier après la connexion

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) {
  // ...
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal