Бинарный парсер или сериализация? - PullRequest
8 голосов
/ 26 августа 2010

Я хочу сохранить график различных объектов для игры, их классы могут или не могут быть связаны, они могут содержать или не содержать векторы простых структур.

  • Я хочу, чтобы операция синтаксического анализаБыстро, данные могут быть довольно большими.
  • Добавление новых вещей не должно быть трудным, и это не должно нарушать обратную совместимость.
  • Меньший размер файла важен
  • Читаемость имеет значение

Под сериализацией я подразумеваю создание объектов для сериализации самих себя, что эффективно, но для этого мне потребуется написать разные методы сериализации для разных объектов.

Путем двоичного анализа /Я имею в виду создание, создание нового дерева синтаксических анализаторов / композиторов, которое хранит и читает данные для этих объектов, и передает его, чтобы мои объекты передавали / извлекали свои данные.

Я также могу использовать json, но это можетбыть довольно медленным для чтения, и это не очень эффективно для размера, когда дело доходит до довольно больших наборов матриц и чисел.

Ответы [ 3 ]

3 голосов
/ 26 августа 2010

Точка за точкой:

  • Быстрый синтаксический анализ: двоичный файл (поскольку вам не обязательно "разбирать", вы можете просто десериализовать)
  • Добавление новых вещей: текст
  • Меньше: текст (даже если сжатый текст больше двоичного, он не будет намного больше).
  • Читабельность: текст

То есть три голоса за текст, одно очко за двоичный. Лично я бы пошел с текстом для всего, кроме изображений (и других данных, которые «естественно» двоичны). Затем сохраните все в большом zip-файле (я думаю, что несколько игр делают это или что-то похожее).

Хорошо читает: Важность текстуальности и Сила простого текста .

1 голос
/ 26 августа 2010

Проверьте буферы протокола от Google или от Apache.Несмотря на то, что этот метод предназначен для простого написания проводных протоколов, он по сути является механизмом сериализации объектов, который может создавать привязки на десятках языков, имеет эффективное двоичное представление, простое управление версиями, высокую производительность и хорошо поддерживается.

0 голосов
/ 26 августа 2010

Мы используем Boost.Serialization. Не знаю, как он работает рядом с тем, что предлагает самкас.

...