#163

Заголовок бинарного формата

Когда разрабатываешь собственный бинарный формат хранения данных, обязательно придумай ему заголовок. Это такая структура фиксированной длины, с которой будет начинаться твой файл. Она содержит:

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

Номер версии. Сегодня ты придумал формат хранения данных, и он прекрасен, но уже завтра тебе нужно будет добавить туда еще пару полей или новый тип сжатия. И как ты будешь отличать старые файлы от новых и читать оба формата? Версия нужна сразу.

Размер файла блока данных. Обычно я пишу туда размер файла минус размер заголовка. Другой вариант: количество записей. Так ты в парсере сможешь проверить, что файл у тебя полный.

Контрольная сумма. На практике достаточно даже MD4, она очень быстрая. Это не вопрос цифровой подписи.

Пустое место. Буквально несколько байт на будущее. Когда ты будешь апгрейдить файлы версии 1 в версию 2, тебе гораздо проще будет перезаписать заголовок той же длины в существующий файл, чем сдвинуться на байт и переписать все целиком.

Размер заголовка я стараюсь делать кратным 2, а все поля — кратными 4 байт, даже номер версии. Почему? Так проще держать структуру в уме и читать ее как из C так и JS.