LINUX.ORG.RU

Придумать и запрограммировать бинарный файловый формат


0

0

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

Заранее спасибо за помощь.


главное чтобы в начале стоял MAGIC string, и далее номер версии формата. Все остальное поправят в последующих версиях.

dilmah ★★★★★
()
Ответ на: комментарий от ddos3

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

yz
() автор топика

Глянь PE, ELF, BMP да и вообще, любой формат.

Главное: 1. поле (тип формата) 2. версия 3. архитектура (хотя бы endianess) 4. бинарные форматы (собсно) ЗЛО

удачи в изобретении (о) :-)

namespace_std
()
Ответ на: комментарий от ddos3

> Бинарный файловый формат для чего?

Думаю, для лабораторки. :)

pitekantrop ★★★
()

1. Высший уровень - архив. Если с относительно редким открытием (документ) - то зип какой (при открытии распаковываются во временную папку, при закрытии пакуется), если файлы этого формата открываться будут часто, то разрабатываешь свой формат без сжатия.
2. Одна структура/массив - один файл.
3. Везде, где можно, используешь текстовые конфиги .ini вида

redgremlin ★★★★★
()
Ответ на: комментарий от yz

самый переносимый способ — сделать два файла один файл текстовый с параметрами матрицы, а второй бинарный где тупо матрица по строкам лежит как она есть, тогда можно будет из любой программы засосать

Reset ★★★★★
()
Ответ на: комментарий от redgremlin

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

можно использовать тот же архив, но без сжатия

lester ★★★★
()
Ответ на: комментарий от ott

> возьми boost.serialize и не мучься... К сожалению, boost у нас запрещён заказчиком. И вообще, разрешён только чистый C++, который компилируется на компиляторах, имеющихся у заказчика.

yz
() автор топика
Ответ на: комментарий от Gorthauer

Ну да! hdtv video надо передавать по сети исключительно в json!
Его можно парсить фильтрами прямо в коммандной строке!

LamerOk ★★★★★
()
Ответ на: комментарий от Gorthauer

есть места, когда бинарные данные легче в использовании. к тому же никто не мешает пользоваться text_archive ;-)

ott ★★★★★
()
Ответ на: комментарий от yz

сочувствую.... тогда надо взять что-то более менее «стандартное» - из того, что выше насоветовали

ott ★★★★★
()

protocol buffers

anonymous
()
Ответ на: CDF/NetCDF от MKuznetsov

Я не понимаю, почему такую простую задачу надо решать с использованием различных костылей-библиотек. Неужели самому так трудно написать запись бинарных данных. Тут же не ставится задача сохранять сложные и гетерогенные по структуре данные.

pathfinder ★★★★
()
Ответ на: комментарий от SV0L0CH

>... размером от мегабайта до нескольких гигов ...

XML запакованый gzip вполне бинарный

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

pathfinder ★★★★
()
Ответ на: комментарий от pathfinder

> Я не понимаю, почему такую простую задачу

Эта задача простая до тех пор пока архитектура = x86. Когда вы захотите расширить свой велосипед до уровня поддержки big и little endian систем, систем с поддержкой доступа к памяти только по выровненным адресам и прочая-прочая, то вы сами придёте к реализации своей сложной библиотеки.

anonymous
()
Ответ на: комментарий от anonymous

>Эта задача простая до тех пор пока архитектура = x86

Вот напугал. А как ты думаешь под какую платформу топикстартер будет писать свой софт?

Заметьте, что не говорю про ненужность библиотек «вообще», я просто говорю про ненужность в данном контексте.

pathfinder ★★★★
()
Ответ на: комментарий от pathfinder

>>... размером от мегабайта до нескольких гигов ...

XML запакованый gzip вполне бинарный

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

Этим всем можно заниматся одновременно

gzip распаковывается без проблем, а то что распаковалось обрабатывается с помощью SAX.

SV0L0CH
()
Ответ на: комментарий от SV0L0CH

>Этим всем можно заниматся одновременно

Судя по аватарке ты большой любитель «заниматься одновременно».

Ну сам подумай сколько времени займет чтение гигабайтного gzip+XML файла по сравнению прямым чтением бинарного файла?

pathfinder ★★★★
()

Самый простой способ - маппирование участка памяти (где эти данные хранятся) в файл. Соответственно, для самих данных надо будет организовать какую-нибудь структуру, указатель на которую и будет возвращаться функцией mmap.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от yz

>boost у нас запрещён заказчиком. И вообще, разрешён только чистый C++

Я так понимаю, что заказчиком является препод по информатике? Не представляю, где ещё может быть заказчик с такими требованиями.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.