2010-02-22 5 views

Répondre

1

Je n'ai pas joué avec l'API C++, vous devrez donc me donner un peu plus de contexte/d'information. Que fait cette méthode? Peut-être un exemple d'utilisation?

Si vous consommez des données à partir d'un flux, il existe des versions de « WithLengthPrefix » pour automatisent limiter à discret messages, ou je croient la méthode pour lire le suivant longueur du flux est sur l'API publique.

Si vous voulez obtenir une longueur en place de sérialisation, alors je soupçonne que l'option la plus facile pourrait être de sérialiser en un flux fictif et de suivre la longueur. Assez curieusement, une ancienne version de protobuf-net avait des méthodes «obtenir la longueur sans faire le travail», mais après une discussion sur le protobuf-net, j'ai supprimé celles-ci. Les données sérialisées sont toujours suivies, évidemment. Cependant, parce que l'API est différente de la longueur de données binaires pour les objets n'est pas disponible "gratuitement".

Si vous clarifiez ce qu'est le cas d'utilisation, je suis sûr que nous pouvons le rendre facilement disponible (si ce n'est déjà fait).


Re le commentaire; c'est ce que je soupçonnais. Parce que protobuf-net diffère la traduction binaire au dernier moment (car il s'agit de types .NET normaux, pas de code auto-généré), il n'y a pas de façon automatique d'obtenir cette valeur sans faire le travail. Je pourrais ajouter un mécanisme pour vous permettre d'obtenir cette valeur en écrivant à Stream.Null? mais si vous avez besoin des données de toute façon vous pourriez bénéficier de simplement écrire à MemoryStream et en vérifiant le .Length avant de copier les données.

+0

La méthode Message :: ByteSize() renvoie la taille sérialisée du message et toutes ses données, y compris les sous-messages. Je cherchais une fonctionnalité similaire pour assigner des buffers avant l'appel SerializeWithLengthPrefix() mais en alternative, laisser le MemoryStream gérer le buffer d'expansion et utiliser l'appel ToArray() pour obtenir un buffer pour le code de réseau. –

+0

@ Sébastien Taylor - Je vais mettre à jour ... –

Questions connexes