Я працюю над інструментом редагування рівня, який зберігає свої дані як XML.
Це ідеально під час розробки, оскільки безболісно вносити невеликі зміни у формат даних, і це прекрасно працює з деревоподібними даними.
Недоліком є те, що XML-файли досить роздуті, в основному через дублювання імен тегів та атрибутів. Також завдяки числовим даним займає значно більше місця, ніж використання нативних типів даних. Невеликий рівень може легко отримати 1Mb +. Я хочу значно зменшити ці розміри, особливо якщо система повинна використовуватися для гри на iPhone або інших пристроях з відносно обмеженою пам'яттю.
Оптимальним рішенням для пам’яті та продуктивності було б перетворення XML у формат бінарного рівня. Але я не хочу цього робити. Я хочу зберегти формат досить гнучким. XML дозволяє легко додавати нові атрибути до об'єктів і надавати їм значення за замовчуванням, якщо завантажується стара версія даних. Тому я хочу дотримуватися ієрархії вузлів, з атрибутами як парами іменних значень.
Але мені потрібно зберігати це у більш компактному форматі - щоб видалити масове дублювання імен тегів / атрибутів. Можливо також надати атрибути нативним типам, тому, наприклад, дані з плаваючою комою зберігаються як 4 байти на поплавок, а не як текстовий рядок.
Google / Вікіпедія виявляють, що "бінарний XML" навряд чи є новою проблемою - це вже було вирішено вже кілька разів. Хтось тут мав досвід роботи з будь-якою з існуючих систем / стандартів? - чи є ідеал для використання в іграх - доступна безкоштовна, легка та кросплатформна бібліотека парсера / завантажувача (C / C ++)?
Або я повинен сам винаходити це колесо?
Або мені краще забути ідеал, і просто стиснути свої сирі дані .xml (він повинен добре упаковуватися при стисненні на блискавці) і просто брати в пам'ять хіт / продуктивність?