2010-11-14 5 views
0

J'écris un système de sérialisation particulier. La première version fonctionne bien. C'est un système hiérarchique de clé de données et de valeurs. Donc, pour obtenir une valeur particulière, vous naviguez vers un nœud particulier et dites getInt ("une clé") etc.Rendre un format de fichier extensible

Mon problème avec le système actuel est que la taille du fichier devient assez grande très rapidement. Je vais lutter contre cela en ajoutant une table à cordes. Le problème avec cela est que je ne peux pas penser à un moyen de soutenir l'ancien système. Tout ce que j'ai, c'est un identifiant de fichier de 32 bits.

Je peux changer l'identificateur de fichier, mais chaque fois que j'apporte une autre modification au format, je vais devoir changer à nouveau l'identificateur.

Quelle est une façon élégante d'implémenter de nouvelles fonctionnalités tout en prenant en charge les anciennes fonctionnalités?

J'ai étudié le format PNG et la création de morceaux semble être un bon choix.

Y a-t-il d'autres conseils que vous pouvez me donner sur les dépendances de blocs et ainsi de suite?

Répondre

2

Si vous avez besoin d'un format binaire, regardez Protocol Buffers, que Google utilise en interne pour les RPC ainsi que la sérialisation à long terme des enregistrements. Chaque zone d'un tampon de protocole est identifiée par un ID entier. Les anciennes applications ignorent (et traversent) les champs qu'elles ne comprennent pas, ce qui vous permet d'ajouter de nouveaux champs en toute sécurité. Vous ne réutilisez jamais les ID de champ obsolètes ou ne modifiez pas le type d'un champ.

Les tampons de protocole prennent en charge les types primitifs (bool, int32, int64, chaîne, tableaux d'octets) ainsi que les messages répétés et même récursivement imbriqués. Malheureusement, ils ne prennent pas en charge les cartes, vous devez donc transformer une carte en une liste de (clé, valeur). Ne pas passer tout votre temps à s'inquiéter de la sérialisation et de la désérialisation. Ce n'est pas aussi amusant que de concevoir des protobufs.

+0

Merci, je vais lire tout de suite! – Brad