Équivalents C pour les fonctions d'E/S délimitées des tampons de protocole en Java
Dans les tampons de protocole, l'ajout de préfixes de longueur avant les messages est essentiel pour la lecture et écrire plusieurs messages à partir de fichiers. Alors que Java dispose de fonctions d'E/S « délimitées » (par exemple, parseDelimitedFrom, mergeDelimitedFrom, writeDelimitedTo) à cet effet, C ne dispose pas de fonctions équivalentes.
Recommandation de Google
Google recommande attacher manuellement des préfixes de longueur aux messages en C . Cela implique :
Cependant, cette approche manque d'optimisations et peut échouer pour entrées supérieures à 64 Mo.
Implémentations C optimisées
Par la suite, des implémentations C optimisées ont été développées et partagées par un ancien auteur de la bibliothèque protobuf de Google. Ces implémentations incluent :
Détails d'implémentation
La fonction writeDelimitedTo crée un nouveau CodedOutputStream pour chaque message et le sérialise à l'aide de la méthode SerializeWithCachedSizes. Si le message tient dans un seul tampon, la méthode SerializeWithCachedSizesToArray plus rapide est utilisée.
La fonction readDelimitedFrom crée un nouveau CodedInputStream et impose une limite de taille par message à l'aide de la méthode PushLimit. Il analyse ensuite le message à l'aide de la méthode MergeFromCodedStream et vérifie que l'intégralité du message a été consommée.
Disponibilité
Ces implémentations C optimisées ne font pas partie de la bibliothèque officielle protobuf. Cependant, ils peuvent être trouvés dans divers référentiels tiers ou implémentés manuellement à l'aide des extraits de code fournis.
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!