Je travaille sur un outil d'édition de niveau qui enregistre ses données au format XML.
C'est idéal pendant le développement, car il est indolore d'apporter de petites modifications au format de données, et cela fonctionne bien avec des données arborescentes.
L'inconvénient, cependant, est que les fichiers XML sont plutôt gonflés, principalement en raison de la duplication des noms de balises et d'attributs. Également dû au fait que les données numériques prennent beaucoup plus d'espace que l'utilisation de types de données natifs. Un petit niveau pourrait facilement devenir 1 Mo +. Je veux réduire ces tailles de manière significative, surtout si le système doit être utilisé pour un jeu sur l'iPhone ou d'autres appareils avec une mémoire relativement limitée.
La solution optimale, pour la mémoire et les performances, serait de convertir le XML en un format de niveau binaire. Mais je ne veux pas faire ça. Je veux garder le format assez flexible. XML facilite l'ajout de nouveaux attributs aux objets et leur donne une valeur par défaut si une ancienne version des données est chargée. Je veux donc garder la hiérarchie des nœuds, avec des attributs comme paires nom-valeur.
Mais j'ai besoin de stocker cela dans un format plus compact - pour supprimer la duplication massive des noms de balises / attributs. Peut-être aussi pour donner des attributs aux types natifs, ainsi, par exemple, les données à virgule flottante sont stockées sous forme de 4 octets par flottant, pas sous forme de chaîne de texte.
Google / Wikipedia révèlent que le «XML binaire» n'est guère un nouveau problème - il a déjà été résolu un certain nombre de fois. Quelqu'un ici a-t-il de l'expérience avec l'un des systèmes / normes existants? - sont-ils idéaux pour les jeux - avec une bibliothèque d'analyseur / chargeur (C / C ++) gratuite, légère et multiplateforme disponible?
Ou devrais-je réinventer cette roue moi-même?
Ou est-ce que je ferais mieux d'oublier l'idéal et de simplement compresser mes données brutes .xml (elles devraient bien s'emballer avec une compression de type zip) et de simplement prendre la mémoire / performance en charge?