Определимся с терминологией. Под
бинарным файлом здесь я понимаю такой способ организации (накладывающей особенности на операции чтения/записи) хранения информации в файле, при которой данные представляют собой, по сути дамп памяти. Иными словами, переменная
при записи в бинарный файл, занимает ровно 4 байта (т.е. sizeof(int) ) и при открытии целевого файла блокнотом не читается в "человеческом" восприятии.
При записи той же переменной в текстовый (не бинарный) файл, переменная займёт 6 байт (при ASCII-кодировании), каждый из которых будет кодировать одну цифру.
Для Blitz basic: бинарный режим - функции типа ReadInt/WriteInt, текстовый - WriteLine.
Плюсы бинарного режима: возможность сэкономить на памяти и стандартизировать требования к её размерам; возможность сохранять произвольные разнородные данные простой запись куска памяти.
Минусы: возможность потратить память (например, если сохраняемые числа в диапазоне [0..999] для int) и полностью утратить возможность к стандартизации (разные архитектуры и платформы); невозможность сохранять данные простой записью куска памяти (разный порядок байт внутри переменной в зависимости от архитектуры, выравнивания и полный хаос со структурами, беготня, спотыкания и ещё большая непереносимость с директивами #pragma pack; адресация членов объекта через указатели, приводящая к необходимости написания отдельных методов его сохранения).
Получается, что бинарные файлы - это хак. Его переносимость весьма условна.
В то же время, используя текстовый формат, мы по сути, перекладываем обязанности по загрузке\выгрузке (трансляции из файла\в файл ) на функции типа atoi\itoa, работающие на более высоком уровне абстракции: медленнее, но зато без оглядки на "аппаратные" особенности.
Речь даже не только о файлах, но о любой сериализации (ту же структурку по сети кинуть - как кодировать?).
Опрос открытый
Спасибо всем кто осилил излияния и дочитал до конца.
Просьба сильно не пинать, если где-то заблуждаюсь