Estou trabalhando em uma ferramenta de edição de nível que salva seus dados como XML.
Isso é ideal durante o desenvolvimento, pois é indolor fazer pequenas alterações no formato dos dados e funciona bem com dados do tipo árvore.
A desvantagem, porém, é que os arquivos XML estão bastante inchados, principalmente devido à duplicação de nomes de tags e atributos. Também devido aos dados numéricos ocuparem muito mais espaço do que o uso de tipos de dados nativos. Um pequeno nível pode facilmente terminar em 1Mb +. Quero reduzir esses tamanhos significativamente, principalmente se o sistema for usado para um jogo no iPhone ou em outros dispositivos com memória relativamente limitada.
A solução ideal, para memória e desempenho, seria converter o XML em um formato de nível binário. Mas eu não quero fazer isso. Eu quero manter o formato bastante flexível. O XML facilita muito adicionar novos atributos aos objetos e atribui a eles um valor padrão se uma versão antiga dos dados for carregada. Então, eu quero manter a hierarquia de nós, com atributos como pares nome-valor.
Mas preciso armazenar isso em um formato mais compacto - para remover a duplicação maciça de nomes de tags / atributos. Talvez também para atribuir tipos nativos aos atributos, portanto, por exemplo, dados de ponto flutuante são armazenados como 4 bytes por flutuador, não como uma sequência de texto.
O Google / Wikipedia revela que 'XML binário' dificilmente é um problema novo - já foi resolvido várias vezes. Alguém aqui tem experiência com algum dos sistemas / padrões existentes? - é ideal para o uso de jogos - com uma biblioteca de analisador / carregador gratuita, leve e multiplataforma (C / C ++) disponível?
Ou devo reinventar essa roda eu mesmo?
Ou será melhor esquecer o ideal e apenas compactar meus dados .xml brutos (eles devem se compactar bem com a compactação do tipo zip) e apenas carregar a memória / desempenho em carga?