Tôi đang làm việc trên một công cụ chỉnh sửa mức lưu dữ liệu của nó dưới dạng XML.
Điều này là lý tưởng trong quá trình phát triển, vì không khó để thực hiện các thay đổi nhỏ đối với định dạng dữ liệu và nó hoạt động độc đáo với dữ liệu giống như cây.
Tuy nhiên, nhược điểm là các tệp XML khá cồng kềnh, chủ yếu là do trùng lặp tên thẻ và thuộc tính. Cũng do dữ liệu số chiếm nhiều không gian hơn so với sử dụng kiểu dữ liệu gốc. Một mức nhỏ có thể dễ dàng kết thúc là 1Mb +. Tôi muốn giảm các kích thước này xuống đáng kể, đặc biệt nếu hệ thống này được sử dụng cho một trò chơi trên iPhone hoặc các thiết bị khác có bộ nhớ tương đối hạn chế.
Giải pháp tối ưu, cho bộ nhớ và hiệu năng, sẽ là chuyển đổi XML sang định dạng mức nhị phân. Nhưng tôi không muốn làm điều này. Tôi muốn giữ định dạng khá linh hoạt. XML giúp dễ dàng thêm các thuộc tính mới vào các đối tượng và cung cấp cho chúng một giá trị mặc định nếu một phiên bản cũ của dữ liệu được tải. Vì vậy, tôi muốn giữ theo thứ bậc của các nút, với các thuộc tính là cặp giá trị tên.
Nhưng tôi cần lưu trữ cái này ở định dạng nhỏ gọn hơn - để loại bỏ sự trùng lặp lớn của tên thẻ / thuộc tính. Cũng có thể để cung cấp cho các thuộc tính kiểu gốc, vì vậy, ví dụ dữ liệu dấu phẩy động được lưu trữ dưới dạng 4 byte cho mỗi float, không phải dưới dạng chuỗi văn bản.
Google / Wikipedia tiết lộ rằng 'XML nhị phân' hầu như không phải là vấn đề mới - nó đã được giải quyết một số lần. Có ai ở đây có kinh nghiệm với bất kỳ hệ thống / tiêu chuẩn hiện có nào không? - có bất kỳ lý tưởng nào cho việc sử dụng trò chơi - với thư viện trình tải / trình phân tích cú pháp / trình tải đa nền tảng miễn phí, nhẹ và có sẵn (C / C ++) không?
Hay tôi nên tự sáng tạo lại cái bánh xe này?
Hoặc tốt hơn hết là tôi quên đi lý tưởng và chỉ nén dữ liệu .xml thô của mình (nó sẽ đóng gói tốt với nén giống như zip) và chỉ cần tải bộ nhớ / hiệu năng khi tải?