Sto lavorando a uno strumento di modifica di livello che salva i suoi dati come XML.
Questo è l'ideale durante lo sviluppo, poiché è indolore apportare piccole modifiche al formato dei dati e funziona bene con i dati ad albero.
Il rovescio della medaglia, tuttavia, è che i file XML sono piuttosto gonfiati, principalmente a causa della duplicazione dei nomi dei tag e degli attributi. Anche a causa dei dati numerici che occupano molto più spazio rispetto all'utilizzo di tipi di dati nativi. Un piccolo livello potrebbe facilmente finire con 1Mb +. Voglio ridurre significativamente queste dimensioni, soprattutto se il sistema deve essere utilizzato per un gioco su iPhone o altri dispositivi con memoria relativamente limitata.
La soluzione ottimale, per memoria e prestazioni, sarebbe convertire l'XML in un formato di livello binario. Ma non voglio farlo. Voglio mantenere il formato abbastanza flessibile. XML semplifica l'aggiunta di nuovi attributi agli oggetti e fornisce loro un valore predefinito se viene caricata una versione precedente dei dati. Quindi voglio mantenere la gerarchia dei nodi, con attributi come coppie nome-valore.
Ma ho bisogno di archiviarlo in un formato più compatto - per rimuovere la massiccia duplicazione dei nomi di tag / attributi. Forse anche per fornire attributi tipi nativi, quindi, ad esempio, i dati in virgola mobile vengono archiviati come 4 byte per float, non come una stringa di testo.
Google / Wikipedia rivelano che l '"XML binario" non è certo un nuovo problema: è già stato risolto diverse volte. Qualcuno qui ha esperienza con qualcuno dei sistemi / standard esistenti? - sono ideali per l'uso dei giochi - con una libreria di parser / loader gratuita, leggera e multipiattaforma (C / C ++) disponibile?
O dovrei reinventare questa ruota da solo?
O sto meglio dimenticando l'ideale e comprimendo i miei dati .xml non elaborati (dovrebbe comprimersi bene con la compressione simile a zip) e solo caricando l'hit di memoria / prestazioni sul caricamento?