Saya sedang mengerjakan alat pengeditan level yang menyimpan datanya sebagai XML.
Ini ideal selama pengembangan, karena tidak sulit untuk membuat perubahan kecil pada format data, dan ini bekerja dengan baik dengan data seperti pohon.
The downside, meskipun, adalah bahwa file XML agak membengkak, sebagian besar karena duplikasi nama tag dan atribut. Juga karena data numerik mengambil lebih banyak ruang secara signifikan daripada menggunakan tipe data asli. Level kecil bisa dengan mudah berakhir sebagai 1 MB +. Saya ingin menurunkan ukuran ini secara signifikan, terutama jika sistem ini akan digunakan untuk permainan di iPhone atau perangkat lain dengan memori yang relatif terbatas.
Solusi optimal, untuk memori dan kinerja, akan mengkonversi XML ke format tingkat biner. Tetapi saya tidak ingin melakukan ini. Saya ingin menjaga formatnya tetap fleksibel. XML membuatnya sangat mudah untuk menambahkan atribut baru ke objek, dan memberi mereka nilai default jika versi lama dari data dimuat. Jadi saya ingin tetap dengan hierarki node, dengan atribut sebagai pasangan nama-nilai.
Tapi saya perlu menyimpan ini dalam format yang lebih ringkas - untuk menghapus duplikasi nama tag / atribut yang masif. Mungkin juga untuk memberikan atribut tipe asli, jadi, misalnya data titik-mengambang disimpan sebagai 4 byte per float, bukan sebagai string teks.
Google / Wikipedia mengungkapkan bahwa 'XML biner' bukan masalah baru - sudah dipecahkan beberapa kali. Adakah yang punya pengalaman di sini dengan sistem / standar yang ada? - apakah ada yang ideal untuk penggunaan game - dengan parser / loader library (C / C ++) gratis, ringan dan lintas platform?
Atau haruskah saya menemukan kembali roda ini sendiri?
Atau apakah saya lebih baik melupakan yang ideal, dan hanya mengompresi data .xml mentah saya (ini harus dikemas dengan baik dengan kompresi mirip zip), dan hanya mengambil memori / kinerja mencapai on-load?