Я работаю над инструментом редактирования уровней, который сохраняет свои данные в формате XML.
Это идеально во время разработки, поскольку безболезненно вносить небольшие изменения в формат данных, и оно прекрасно работает с древовидными данными.
Недостатком, однако, является то, что файлы XML довольно раздуты, в основном из-за дублирования имен тегов и атрибутов. Также из-за того, что числовые данные занимают значительно больше места, чем при использовании собственных типов данных. Небольшой уровень может легко закончиться как 1Mb +. Я хочу значительно уменьшить эти размеры, особенно если система будет использоваться для игр на iPhone или других устройствах с относительно ограниченной памятью.
Оптимальным решением для памяти и производительности было бы преобразование XML в двоичный формат. Но я не хочу этого делать. Я хочу сохранить формат достаточно гибким. XML позволяет очень легко добавлять новые атрибуты к объектам и присваивать им значение по умолчанию, если загружена старая версия данных. Поэтому я хочу придерживаться иерархии узлов с атрибутами в качестве пар имя-значение.
Но мне нужно хранить это в более компактном формате - чтобы убрать массовое дублирование имен тегов / атрибутов. Может также дать атрибуты нативные типы, так что, например, данные с плавающей точкой хранятся в виде 4 байтов на число с плавающей запятой, а не в виде текстовой строки.
Google / Wikipedia показывают, что «двоичный XML» вряд ли является новой проблемой - он уже решался несколько раз. Кто-нибудь здесь получил опыт работы с какой-либо из существующих систем / стандартов? - Есть ли какой-нибудь идеал для использования в играх - с бесплатной, легкой и кроссплатформенной библиотекой парсера / загрузчика (C / C ++)?
Или мне самому изобретать это колесо?
Или мне лучше забыть об идеале и просто сжать мои сырые .xml данные (они должны хорошо упаковываться с zip-подобным сжатием), и просто взять нагрузку памяти / производительности на нагрузку?