J'ai une grande structure de données que je suis serializing. À certains moments j'ai besoin d'éditer les valeurs dans la structure de données. Mais juste pour changer une petite valeur je devrai re-sérialiser encore au lieu de mettre à jour la valeur changée dans le dossier. J'ai entendu parler de Google protocol buffer's. L'emploierez-vous résoudre mon problème de réécrire le dossier? Est-ce une meilleure option pour moi d'utiliser le tampon de protocole au lieu de la sérialisation Java?Protocole tampon mieux que la sérialisation?
Répondre
Si vous vous souciez des performances, n'utilisez pas de format texte pour vos données. Si vous souhaitez modifier les données sans les désérialiser, vous devez utiliser un format de données d'enregistrement fixe. Vous devrez probablement l'inventer manuellement. Recherchez ensuite la position correcte dans le fichier et réécrivez uniquement le champ modifié. Vous pouvez commencer par utiliser DataOutputStream
ou utiliser une base de données telle que HSQLDB
pour stocker et modifier vos données. En pensant à ce sujet plus, à moins que vos objets ne soient très simples, je pense qu'une base de données serait un meilleur moyen d'y aller.
Plus d'info sur DataOutputStream: http://download.oracle.com/javase/tutorial/essential/io/datastreams.html
Java Bases de données: http://java-source.net/open-source/database-engines
Les tampons de protocole sont eux-mêmes un format de sérialisation, donc ils ne changeront pas fondamentalement l'image (vous devrez toujours re-sérialiser après avoir changé une valeur).
Les documents de Google affirment que les tampons de protocole sont plus compacts et plus rapides à analyser que XML (ce qui semble plausible); Je ne sais pas comment ils se comparent à la sérialisation Java native. Les avantages des tampons de protocole peuvent être la portabilité (si les programmes écrits dans d'autres langages doivent lire le fichier) et l'évolutivité (vous pouvez ajouter de nouveaux champs à la structure de données sans casser le format de fichier).
Vous avez besoin d'un format de sérialisation pouvant être directement modifié, par exemple XML ou JSON. tampon de protocole Google est un format binaire - comme la sérialisation java - et ne peut donc pas être directement modificateur ...
Un couple de points
- Il y a un éditeur pour Protocol Buffers format binaire (http://code.google.com/p/protobufeditor/)
- tampons de protocole a un format de texte qui ressemble à:
# Textual representation of a protocol buffer. # This is *not* the binary format used on the wire. person { name: "John Doe" email: "[email protected]" }
Voir:
- Discussion: http://groups.google.com/group/protobuf/browse_thread/thread/04fc478088137bf3
- Classe: http://code.google.com/apis/protocolbuffers/docs/reference/java/com/google/protobuf/TextForm
Cela dit, je voudrais utiliser une technologie (JSON, Xml etc) qui est déjà en cours d'utilisation à moins que l'une des situations suivantes
- Vous avez besoin des performances des tampons de protocole
- Vous avez déjà/prévoyez d'utiliser des tampons de protocole
- 1. Polymorphisme de tampon de protocole
- 2. Tampon de protocole et UTF16 Unicode
- 3. scribe avec tampon de protocole et épargne avancée?
- 4. Protocole de réseau tampon avec Windows Phone 7
- 5. Question de conception sur les événements de protocole tampon
- 6. C/C++ Serialize Rapide: Boost vs Cpickle vs JSON vs tampon de protocole
- 7. Pourquoi la sérialisation binaire est-elle plus rapide que la sérialisation xml?
- 8. Comment les tampons de protocole peuvent-ils prendre en charge la sérialisation/désérialisation des conteneurs std?
- 9. Bibliothèque de sérialisation C++ prenant en charge la sérialisation partielle?
- 10. est XmlFormat() toujours mieux que htmlEditFormat()?
- 11. Est-ce que les buffers google supportent le calcul de la taille avant la sérialisation?
- 12. Est-ce que l'implémentation de méthodes IEquatable brise la sérialisation?
- 13. Question de protocole USB HID
- 14. Comment importer des définitions de tampon de protocole d'un autre paquet Python?
- 15. Envoi efficace de messages de tampon de protocole avec http sur une plate-forme Android
- 16. Quel format de sérialisation pour les paires clé/valeur est le mieux indexable dans SGBDR?
- 17. Comment insérer un message répété dans un tampon de protocole google _pb2.py fichier
- 18. Comment mieux sérialiser une image java.awt.Image?
- 19. Mieux comprendre la libération de la mémoire
- 20. Q sur sérialisation Python/désérialisation
- 21. Envoi de la longueur du tampon et de la mémoire tampon sur la socket dans c
- 22. Pré-tampon tampon Z avec OpenGL?
- 23. La sérialisation XML est lente
- 24. Problème lors de la sérialisation
- 25. Question sur la sérialisation XML
- 26. Protocole Bluetooth?
- 27. protocole Async tcp en C#
- 28. Comment écouter les événements componentShown/componentHidden mieux que ComponentListener?
- 29. Où est-ce que Smalltalk-80 est le mieux utilisé?
- 30. Que fait le protocole SSL pour les applications Web?
peut vous donner un exemple de code. – Emil