Maison >développement back-end >C++ >E/S délimitées par tampon de protocole C : existe-t-il des fonctions équivalentes à Java ?

E/S délimitées par tampon de protocole C : existe-t-il des fonctions équivalentes à Java ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-05 00:32:12217parcourir

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

Fonctions d'E/S délimitées par les tampons de protocole : équivalents C ?

Dans le but de lire et d'écrire plusieurs messages de tampons de protocole à partir de fichiers utilisant à la fois C et Java, il a Il a été observé que Java fournit un ensemble de fonctions d'E/S "délimitées" à cet effet. Cependant, il reste incertain si C offre des fonctionnalités similaires.

Les fonctions de l'API Java sont :

  • parseDelimitedFrom
  • mergeDelimitedFrom
  • writeDelimitedTo

Équivalents C

Comme de la version 3.3.0, Google a résolu ce problème en introduisant les équivalents C suivants dans google/protobuf/util/delimited_message_util.h :

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
}

Format Wire pour les préfixes de taille Java

Pour ceux qui cherchent à analyser les messages avec préfixe de taille en C sans utiliser la bibliothèque officielle, le format filaire est le suivant suit :

  1. La taille du message est représentée par un entier de longueur variable de 32 bits.
  2. Un seul octet est ajouté après la taille pour garantir la compatibilité ascendante.
  3. Les données du message sont ajoutées après la taille et la compatibilité byte.

Optimisations

Les implémentations C fournies incluent des optimisations qui manquaient dans d'autres réponses. Ces optimisations garantissent que les fonctions :

  • N'échouent pas après 64 Mo de saisie.
  • Appliquez la limite de 64 Mo sur chaque message individuel.
  • Utilisez une connexion directe plus rapide. chemin de sérialisation vers le tableau lorsque cela est possible.

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!

Déclaration:
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