Ich arbeite an einem Level-Editing-Tool, das seine Daten als XML speichert.
Dies ist ideal während der Entwicklung, da es schmerzlos ist, kleine Änderungen am Datenformat vorzunehmen, und es funktioniert gut mit baumartigen Daten.
Der Nachteil ist jedoch, dass die XML-Dateien ziemlich aufgebläht sind, was hauptsächlich auf die Duplizierung von Tag- und Attributnamen zurückzuführen ist. Dies ist auch darauf zurückzuführen, dass numerische Daten erheblich mehr Platz beanspruchen als native Datentypen. Ein kleiner Pegel kann leicht 1 MB + betragen. Ich möchte diese Größen erheblich reduzieren, insbesondere wenn das System für ein Spiel auf dem iPhone oder anderen Geräten mit relativ begrenztem Speicher verwendet werden soll.
Die optimale Lösung für Speicher und Leistung besteht darin, das XML in ein Binärformat zu konvertieren. Aber ich möchte das nicht tun. Ich möchte das Format ziemlich flexibel halten. Mit XML ist es sehr einfach, Objekten neue Attribute hinzuzufügen und ihnen einen Standardwert zuzuweisen, wenn eine alte Version der Daten geladen wird. Ich möchte also bei der Hierarchie der Knoten bleiben und Attribute als Name-Wert-Paare verwenden.
Ich muss dies jedoch in einem kompakteren Format speichern, um die massive Verdoppelung von Tag- / Attributnamen zu vermeiden. Vielleicht auch, um Attributen native Typen zu geben, so werden beispielsweise Gleitkommadaten als 4 Bytes pro Gleitkomma gespeichert, nicht als Textzeichenfolge.
Google / Wikipedia zeigen, dass 'binäres XML' kaum ein neues Problem darstellt - es wurde bereits mehrmals gelöst. Hat hier jemand Erfahrung mit einem der vorhandenen Systeme / Standards? - Gibt es eine ideale Lösung für Spiele - Mit einer kostenlosen, leichten und plattformübergreifenden Parser / Loader-Bibliothek (C / C ++)?
Oder soll ich dieses Rad selbst neu erfinden?
Oder ist es besser für mich, das Ideal zu vergessen und nur meine rohen XML-Daten zu komprimieren (es sollte sich gut mit einer zip-ähnlichen Komprimierung packen lassen) und nur den Speicher- / Leistungstreffer beim Laden zu berücksichtigen?