2010-10-12 4 views
4

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

3

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

+0

peut vous donner un exemple de code. – Emil

5

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).

1

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 ...

4

Un couple de points

  1. Il y a un éditeur pour Protocol Buffers format binaire (http://code.google.com/p/protobufeditor/)
  2. 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:

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

  1. Vous avez besoin des performances des tampons de protocole
  2. Vous avez déjà/prévoyez d'utiliser des tampons de protocole
Questions connexes