J'aimerais utiliser le tampon de protocole dans mon programme pour lire des données à partir d'un fichier. J'aimerais également pouvoir modifier le fichier de données avec n'importe quel éditeur de texte, pour un démarrage (je vais écrire un éditeur de données plus tard et passer en binaire complet). P>
Y a-t-il un moyen d'analyser un format lisible par l'homme? (Chaîne de débogage fournie par Protobuf elle-même, ou un autre format). P>
4 Réponses :
Il existe également un format textuel, mais la prise en charge de la mise en œuvre est spécifique. Par exemple, je ne le supporte pas du tout em> dans Protobuf-net. Mais oui: tel est défini et discuté (par exemple) ici: http://code.google.com/apis/protocolbuffer/docs/reference/cpp/google.protobuf.text_format.html P>
Personnellement, je préférerais utiliser binaire et écrire un UI autour du modèle. P>
Merci ! Cela fera, comme il est temporaire. Je n'ai pas besoin de portabilité ni de compatibilité à long terme à ce stade, et je vais écrire un éditeur plus tard si nécessaire.
Êtes-vous sûr de vouloir utiliser protobuf? Vous pouvez utiliser JSON au début, puis passer à BSON ou à MessagePack en tant que format binaire. P>
La combinaison JSON / BSON présente l'avantage que vous pouvez utiliser la même bibliothèque (JSON.NET) pour eux. Je crois que Bson est un peu plus grand que proobuf. P>
ou vous pouvez utiliser JSON / MessagePack. Techniquement, MessagePack est un meilleur format binaire que Boss / Protobuf IMO. Mais le support d'outillage est pire et vous aurez besoin d'une bibliothèque séparée pour JSON et MessagePack. Il prend en charge tout ce que JSON et plus (en particulier, il peut utiliser des clés en chaîne et entier dans des dictionnaires). P>
Comparaison rapide du msgpack et de Protobuf: P>
Merci pour les alternatives, mais je vais essayer de protobuf. Toutes les solutions semblent assez semblables à mes besoins, donc je viens de choisir arbitrairement une.
Je suis curieux: Quels voyous dans msgpack considérez-vous comme mieux?
@Marc c'est qu'il s'agit davantage de décrivant que c'est certainement beaucoup plus. Dans Protobuf, je ne vois même pas si quelque chose est un soumettage ou une blob. Les clés de dictionnaire non entières sont bien aussi. Pour les autres différences sont relativement mineures, mais dans la plupart d'entre elles, je préfère légèrement msgpack.
N'oubliez pas, cela pourrait aussi être une chaîne ou une matrice emballée; P (re blob / sous-message)
@Marc je ne me soucie pas trop de la distinction binaire vs cordle. Ce que je tiens dans ce contexte, c'est que je peux exécuter le lecteur de protobuf sans qu'il connaisse la DTD, puis travaillez sur sa sortie sans avoir à revenir au lecteur Protobuf.
@Codeinchaos hehehe si je jamais i> Terminez ProTobuf-Net (ou au moins, suffisamment heureux avec elle), peut-être que je vais écrire une nouvelle couche de sortie à l'aide de MSGPack. Principalement juste pour prouver un point; p
Si cela ne vous dérange pas d'utiliser des outils de ligne de commande, le projet PIQI Project inclut PIQI Convert Commande pour la conversion entre 4 formats: Tampons de protocole binaires, JSON, XML et PIQ . Le format PIQ est spécialement conçu pour visualiser et éditer des données dans un éditeur de texte. P>
La question ne spécifie pas le langage de programmation et ma réponse ne concerne que Java.
en Java, un message code>
instance Tostring code>
La méthode renvoie un format textuel lisible par l'homme. Le même format peut ensuite être analysé dans un message code> instance code> par TEXTFORMAT.MERGE CODE>
: P>
String messageString = ... MyMessage.Builder builder = MyMessage.newBuilder(); TextFormat.merge(messageString, builder); MyMessage newMessage = builder.build();