Как вы выложите свой собственный двоичный формат файла? - PullRequest
7 голосов
/ 03 октября 2011

Каждое приложение имеет свой собственный двоичный формат файла (например, .mpq, .wad). Кроме того, его обычно застегивают на молнию.

Итак, мой вопрос, как вы хитро / умело создаете двоичное содержимое вашего файла. Есть ли у вас структура с оглавлением в начале? Лучше ли свалить все в один файл?

Допустим, у вас есть массив Shapes, и в каждом Shape деформированы данные вершин (поэтому данные вершин изменились по сравнению с файлом, из которого они были изначально загружены, поэтому их следует сохранить заново).

class Shape
{
    vector<Vertex> verts ;
} ;

class Sphere : public Shape { } ; // ...more geometric shapes (Tet, Cube) are defined..

class Model : public Shape { } ; // general model "Shape" loaded from file

vector<Shape*> shapes ; // save me!  contents are mix of Model, Sphere, Tet..
// each with variable number of verts

Ответы [ 2 ]

7 голосов
/ 03 октября 2011

Моя любимая статья на тему форматов файлов: http://www.fadden.com/techmisc/file-formats.htm.

Помимо этого, вероятно, все сводится к тому, какие данные вы храните и как эти данные будут использоваться (будут ли они передаваться по сети, в первую очередь? 1004 *

Начните с этой статьи; это может помочь кристаллизовать ваши мысли, если у вас уже есть формат, который требует разработки.

1 голос
/ 03 октября 2011

Короче говоря - если вам нужна только сериализация, что означает, что вы будете читать и писать из потока и в поток, тогда вы можете использовать здесь легкую задачу и выдавать ваш член scructs за членом или использовать любую имеющуюся библиотеку сериализации.

Если нет, и вам потребуется прямой доступ к вашим данным внутри файла, тогда ... вы будете использовать свои требования, и онис некоторым навыком расскажет вам, какой будет структура вашего файла.

И да, к широкой теме, чтобы остановиться здесь.Например,

Мне нужна база данных миниатюр для моего программного обеспечения.У каждого эскиза есть временная метка, и я знаю, что они будут разного размера.Требования:

  • последовательная запись (большие пальцы будут добавлены в конец базы данных)
  • большие пальцы будут добавлены в порядке возрастания
  • прямое чтение (заданное время, получить миниатюру в o (1)
  • без более поздней модификации базы данных
  • миниатюры будут с интервалом в 15 секунд

Да, требования здесь просты,но они стоят сами за себя.

Я создал два файла, один с индексами, а другой с изображениями.

Хранение: добавить файл данных с изображением, добавить индексный файл с индексом изображения в данныхфайл.Чтение: найдите индекс в файле, используя простое индексирование (индекс (timestamp-timestamp_start)/15).Используйте этот индекс для извлечения данных изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...