Это зависит
Правильный ответ - это зависит. Например, если вы пишете аудио / видео данные, если вы ломаете их в удобочитаемый формат, они не будут очень удобочитаемыми! И текстовые документы являются классическим примером, когда люди хотели, чтобы они были удобочитаемыми для человека, чтобы они были более гибкими, и, переходя на XML, MS идут по этому пути.
Гораздо важнее, чем бинарный или текстовый стандарт или не стандарт. Если вы используете стандартный формат, то, скорее всего, вам и следующему парню не придется писать парсер, и это победа для всех.
Ниже приведены некоторые аргументированные причины, по которым вам может потребоваться выбрать одно из другого, если вам нужно написать собственный формат (и синтаксический анализатор).
Зачем использовать читабельный человек?
- Следующий парень . Представьте себе, что ведущий разработчик просматривает ваш код через 30 или шесть месяцев. Да, он должен иметь исходный код. Да, он должен иметь документы и комментарии. Но он, скорее всего, не будет. И, будучи этим парнем и должен был спасать или конвертировать старые, чрезвычайно ценные данные, я буду благодарен вам за то, что вы сделали то, что я могу просто посмотреть и понять.
- Позвольте мне прочитать И НАПИСАТЬ его своими инструментами . Если я пользователь emacs, я могу это использовать. Или Vim, или блокнот, или ... Даже если вы создали отличные инструменты или библиотеки, они могут не работать на моей платформе или даже вообще не работать. Кроме того, я могу создавать новые данные с помощью своих инструментов.
- Налог невелик - хранилище бесплатно . Почти всегда дисковое пространство свободно. И если это не так, вы будете знать. Не беспокойтесь о нескольких угловых скобках или запятых, обычно это не имеет большого значения. Преждевременная оптимизация - корень всего зла. И если вы действительно беспокоитесь, просто используйте стандартный инструмент сжатия, и тогда у вас есть небольшой читаемый человеком формат - любой может запустить unzip.
- Налог не такой большой - компьютеры быстры . Это может быть быстрее для анализа двоичного файла. Пока вам не понадобится добавить дополнительный столбец или тип данных или поддерживать как устаревшие, так и новые файлы. (хотя это смягчается с помощью буферов протокола )
- Есть много хороших форматов . Даже если вам не нравится XML. Попробуйте CSV. Или JSON. Или. Свойства. Или даже XML. Существует множество инструментов для их анализа уже на многих языках. И это займет всего 5 минут, чтобы написать их снова, если загадочным образом весь исходный код потерян.
- Различия становятся легкими . Когда вы регистрируетесь в системе контроля версий, гораздо легче увидеть, что изменилось. И просматривать его в Интернете. Или твой айфон. Двоичный код, вы знаете, что что-то изменилось, но вы полагаетесь на комментарии, чтобы сказать вам, что.
- Слияния становятся проще . В Интернете по-прежнему возникают вопросы о том, как добавить один PDF-файл в другой. Это не происходит с текстом.
- Легче ремонтировать, если повреждено . Попробуйте восстановить поврежденный текстовый документ или поврежденный ZIP-архив. Достаточно сказано.
- Каждый язык (и платформа) может читать или писать . Конечно, двоичный код является родным языком для компьютеров, поэтому каждый язык также будет поддерживать двоичный код. Но многие классические языки сценариев инструментов намного лучше работают с текстовыми данными. Я не могу думать о языке, который хорошо работает с бинарным, а не с текстом (может быть, ассемблер), но не наоборот. А это значит, что ваши программы могут взаимодействовать с другими программами, о которых вы даже не думали или которые были написаны за 30 лет до вашей. Есть причины, по которым Unix был успешным.
Почему бы и нет, а вместо этого использовать бинарный файл?
- Возможно, у вас много данных - терабайт, возможно. И тогда фактор 2 может действительно иметь значение. Но преждевременная оптимизация все еще является корнем зла. Как насчет использования человека сейчас, а преобразования позже? Это не займет много времени.
- Хранилище может быть бесплатным, но пропускная способность не равна (Джон Скит в комментариях). Если вы разбрасываете файлы по сети, тогда размер действительно может иметь значение. Даже пропускная способность диска и с диска может быть ограничивающим фактором.
- Код с действительно высокой производительностью . Двоичный код может быть серьезно оптимизирован. Существует причина, по которой базы данных обычно не имеют своего собственного текстового формата.
- Бинарный формат может быть стандартным . Так что используйте PNG, MP3 или MPEG. Это облегчает работу следующих ребят (по крайней мере, в течение следующих 10 лет).
- Существует множество хороших двоичных форматов . Некоторые из них являются глобальными стандартами для данных такого типа. Или может быть стандартом для аппаратных устройств. Некоторые из них являются стандартными средами сериализации. Отличным примером является Буферы протокола Google . Другой пример: Bencode
- Проще встраивать двоичные файлы . Некоторые данные уже являются двоичными, и вам нужно их встроить. Это естественно работает в двоичных форматах файлов, но выглядит уродливо и очень неэффективно в читаемых человеком, и обычно мешает им быть читаемыми человеком.
- Умышленное безвестность . Иногда вы не хотите, чтобы было очевидно, что делают ваши данные. Шифрование лучше, чем случайная защита из-за неясности, но если вы шифруете, вы можете также сделать его двоичным и покончить с этим.
Дискуссионный
- Проще разбирать . Люди утверждают, что и текст, и двоичный файл легче разбирать. Очевидно, что анализ легче всего делать, когда ваш язык или библиотека поддерживает синтаксический анализ, и это верно для некоторых двоичных и некоторых читаемых человеком форматов, поэтому на самом деле также не поддерживает. Бинарные форматы могут быть четко выбраны, чтобы их было легко анализировать, но так же легко для восприятия человеком (например, CSV или фиксированная ширина), поэтому я считаю, что этот вопрос спорный. Некоторые двоичные форматы могут быть просто выгружены в память и использованы как есть, так что это можно назвать самым простым для анализа, особенно если используются числа (не только строки. Однако я думаю, что большинство людей будет утверждать, что разбор понятный для человека анализ легче отлаживать , поскольку легче увидеть, что происходит в отладчике (слегка).
- Легче контролировать . Да, более вероятно, что кто-то будет искажать текстовые данные в своем редакторе или будет стонать, когда один формат Unicode работает, а другой - нет. С двоичными данными это менее вероятно. Тем не менее, люди и оборудование все еще могут искажать двоичные данные. И вы можете (и должны) указать кодировку текста для удобочитаемых или фиксированных данных.
В конце концов, я не думаю, что любой из них действительно может претендовать здесь на преимущество.
Что-нибудь еще
Вы действительно хотите файл? Вы рассматривали базу данных? : -)
Кредиты
Большая часть этого ответа объединяет вещи, которые другие люди писали в других ответах (вы можете увидеть их там). И особенно большое спасибо Джону Скиту за его комментарии (и здесь, и офлайн) за то, что они предложили способы, которыми это могло быть улучшено.