Подтвердить что ты не робот

Почему я должен использовать читаемый пользователем формат файла?

Почему я должен использовать формат файла для чтения, предпочтительный для двоичного? Есть ли когда-нибудь ситуация, когда это не так?

EDIT: У меня было это как объяснение, когда сначала отправлял вопрос, но теперь он не так актуален:

При ответе на этот вопрос я хотел отсылать искателя к стандартному ответу SO о том, почему использование удобного для чтения формата файла является хорошей идеей. Затем я искал один и не смог найти его. Итак, вопрос

4b9b3361

Ответ 1

Это зависит от

Правильный ответ зависит от этого. Если вы пишете аудио/видео данные, например, если вы забиваете его в удобочитаемый для человека формат, это будет не очень читаемо! И текстовые документы - это классический пример, когда люди хотели, чтобы они были читабельны для человека, поэтому они более гибкие и, перейдя к XML MS, идут именно так.

Гораздо важнее, чем двоичный или текстовый стандарт, а не стандарт. Если вы используете стандартный формат, то, скорее всего, вы и следующий парень не должны писать парсер, и это победа для всех.

Ниже приведены некоторые упрямые причины, по которым вы можете выбрать один из них, если вам нужно написать свой собственный формат (и парсер).

Зачем использовать читаемые человеком?

  • Следующий парень. Подумайте о том, что поддерживающий разработчик просматривает ваш код через 30 лет или шесть месяцев. Да, у него должен быть исходный код. Да, он должен иметь документы и комментарии. Но он, скорее всего, не будет. И, будучи этим парнем, и мне пришлось спасать или преобразовывать старые, чрезвычайно ценные данные, я благодарю вас за то, что вы сделали что-то, на что я могу просто взглянуть и понять.
  • Позвольте мне прочитать И НАПИСАТЬ его своими инструментами. Если я пользователь emacs, я могу это использовать. Или Vim, или блокнот или... Даже если вы создали отличные инструменты или библиотеки, они могут не работать на моей платформе или даже запускаться вообще. Кроме того, я могу создавать новые данные с помощью моих инструментов.
  • Налог не такой большой - свободное хранение. Почти всегда свободное место на диске. И если это не так, ты будешь знать. Не беспокойтесь о нескольких угловых скобках или запятых, обычно это не будет иметь большого значения. Преждевременная оптимизация - это корень всего зла. И если вы действительно волнуетесь, просто используйте стандартный инструмент сжатия, а затем у вас есть небольшой читаемый для пользователя формат - каждый может запускать unzip.
  • Налог не такой большой - компьютеры быстрые. Возможно, было бы быстрее разбор бинарных файлов. Пока вам не понадобится добавить дополнительный столбец или тип данных или поддерживать как старые, так и новые файлы. (хотя это смягчается с помощью Буферов протоколов)
  • Есть много хороших форматов. Даже если вам не нравится XML. Попробуйте CSV. Или JSON. Или .properties. Или даже XML. Существует множество инструментов для разбора их уже на множестве языков. И это займет всего 5 минут, чтобы написать их снова, если таинственно потеряется весь исходный код.
  • Диффы становятся легкими. Когда вы входите в систему контроля версий, гораздо легче увидеть, что изменилось. И просмотрите его в Интернете. Или ваш iPhone. Двоичный, вы знаете, что что-то изменилось, но вы полагаетесь на комментарии, чтобы сказать вам, что.
  • Слияния становятся легкими. Вы все еще задаете вопросы в Интернете, спрашивая, как добавить один PDF в другой. Это не происходит с текстом.
  • Легче восстановить поврежденный. Попробуйте восстановить поврежденный текстовый документ и поврежденный архив zip. Достаточно сказано.
  • Каждый язык (и платформа) может читать или писать. Конечно, двоичный код является родным для компьютеров, поэтому каждый язык будет поддерживать двоичный файл. Но многие классические небольшие скриптовые языки инструментов намного лучше работают с текстовыми данными. Я не могу придумать язык, который хорошо работает с двоичным, а не с текстом (возможно, ассемблер), но не наоборот. И это означает, что ваши программы могут взаимодействовать с другими программами, о которых вы даже не думали, или которые были написаны за 30 лет до вашего. Есть причины, по которым Unix была успешной.

Почему бы и не использовать вместо этого двоичный файл?

  • Возможно, у вас может быть много данных - терабайт. И тогда фактор 2 действительно может иметь значение. Но преждевременная оптимизация все еще является корнем всего зла. Как насчет того, чтобы использовать человека сейчас, а потом конвертировать? Это не займет много времени.
  • Хранение может быть бесплатным, но пропускная способность не (Jon Skeet в комментариях). Если вы бросаете файлы по сети, тогда размер действительно может изменить ситуацию. Даже пропускная способность на диск и с него может быть ограничивающим фактором.
  • Действительно эффективный код. Бинарные файлы могут быть серьезно оптимизированы. Базы данных причин обычно не имеют собственного текстового формата.
  • Бинарный формат может быть стандартным. Поэтому используйте PNG, MP3 или MPEG. Это облегчает работу следующих парней (по крайней мере, следующие 10 лет).
  • Там есть много хороших бинарных форматов., Некоторые из них являются глобальными стандартами для данных такого типа. Или может быть стандартом для аппаратных устройств. Некоторые из них являются стандартными структурами сериализации. Хорошим примером является Google Protocol Buffers. Другой пример: Bencode
  • Легче вставлять двоичный. Некоторые данные уже являются бинарными, и вам необходимо встроить их. Это естественным образом работает в форматах двоичных файлов, но выглядит уродливым и очень неэффективным в человеческих читаемых и обычно останавливает их, когда они читаются человеком.
  • Преднамеренная безвестность. Иногда вы не хотите, чтобы это было очевидно, что делают ваши данные. Шифрование лучше, чем случайная безопасность через неясность, но если вы шифруете, вы можете сделать это двоичным и сделать с ним.

Дискуссионный

  • Легче разбирать. Люди утверждали, что и текст, и бинарность легче разбирать. Теперь ясно, что проще всего разобрать, когда ваш язык или библиотека поддерживает синтаксический анализ, и это верно для некоторых бинарных и некоторых человекочитаемых форматов, поэтому на самом деле не поддерживается. Бинарные форматы могут быть четко выбраны, поэтому их легко разобрать, но они могут читаться человеком (думаю, CSV или фиксированная ширина), поэтому я думаю, что этот вопрос спорный. Некоторые двоичные форматы можно просто сбрасывать в память и использовать как есть, поэтому можно сказать, что это проще всего анализировать, особенно если числа (не только строки задействованы). Однако я думаю, что большинство людей будут утверждать, что распознаваемый человеком синтаксический анализ легче отлаживать, так как легче увидеть, что происходит в отладчике (слегка).
  • Легче управлять. Да, скорее всего кто-то будет калечить текстовые данные в своем редакторе или будет стонать, когда один формат Unicode работает, а другой - нет. С менее вероятными двоичными данными. Тем не менее, люди и аппаратные средства все еще могут искажать двоичные данные. И вы можете (и должны) указать текстовое кодирование для удобочитаемых данных, гибкое или фиксированное.

В конце дня, я не думаю, что он может действительно претендовать на преимущество здесь.

Что-нибудь еще

Вы действительно хотите файл? Вы считали базу данных?: -)

Кредиты

Многие из этих ответов объединяются вместе, другие люди писали в других ответах (их можно увидеть там). И особенно большое спасибо Jon Skeet за его комментарии (и здесь, и в автономном режиме) за то, что они предложили способы его улучшения.

Ответ 2

Все зависит от ситуации.

Преимущества читаемого человеком формата:

  • Вы можете прочитать его в своем "родном" формате
  • Вы можете написать это самостоятельно, например. для модульных тестов - или даже для реального контента, в зависимости от того, что он для

Вероятные преимущества двоичного формата:

  • Легче анализировать (с точки зрения кода)
  • Быстрее разбора
  • Более эффективный с точки зрения пространства
  • Легче управлять (в любое время, когда вам нужен текст там, вы можете обеспечить кодировку UTF-8 и префикс длины и т.д.)
  • Легче включать непрозрачные двоичные данные (изображения и т.д. - с текстовым форматом, который вы получаете в base64).

Не забывайте, что вы всегда можете реализовать двоичный формат, но создавать инструменты для преобразования в/из читаемого человеком формата. Это то, что делает инфраструктура буферов протоколов - на самом деле довольно редкий IME должен анализировать текстовую версию буфера протокола, но он действительно удобен для записи в виде текста.

EDIT: на всякий случай это будет признанный ответ, вы также должны иметь в виду пункт, сделанный starblue: Человекообразные формы намного лучше отличаются друг от друга, Я подозреваю, что было бы целесообразно разработать двоичный формат, который подходит для различения (и там, где может быть сформирован человеко-читаемый diff), но встроенная поддержка существующих инструментов diff будет лучше для текста.

Ответ 3

Управление версиями проще с текстовыми форматами, так как изменения можно легко просмотреть и объединить.

Особенно MS-Word дает нам печаль в этом отношении.

Ответ 4

  • Открытый формат - нет двоичного juggling бит
  • Считываемость:)
  • Обмен между платформами
  • Отладочная помощь
  • Легко анализируется (и легко преобразуется в любой)

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

Ответ 5

Основная причина заключается в том, что, если кто-то должен прочитать данные, скажем, через 30 лет, можно понять человеческий читаемый формат. Двоичные файлы намного сложнее.

Если у вас есть большие наборы данных, которые по природе являются двоичными (например, изображения), они, очевидно, не могут быть сохранены ни в какой другой форме, кроме двоичной. Но даже тогда метаданные могли (и должны!) Быть удобочитаемыми.

Ответ 6

Там что-то называется "Искусство программирования Unix".

Я не скажу, что это хорошо или плохо, но это довольно знаменито. Он имеет целую главу под названием Textuality, в которой автор утверждает, что формат для чтения человеком является важной частью метода программирования Unix.

Ответ 7

Они открывают возможность создания/редактирования с помощью инструментов, отличных от оригинальных. Новые и лучшие инструменты могут быть разработаны другими, становится возможной интеграция в сторонние приложения. Подумайте о бинарных файлах iCal, например, был ли формат успешным?

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

Ответ 8

Плюсы для двоичных:

  • быстро разобрать
  • обычно меньшие данные
  • легко написать парсер для

Плюсы для чтения человеком:

  • легче понять при чтении - нет "поле X установлено на 4 487, что означает, что реактор должен быть выключен ТЕПЕРЬ"
  • если вы используете что-то вроде XML, легко написать инструмент, который будет анализировать любой файл

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

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

Ответ 9

Потому что вы человек, и рано или поздно вы (или один из ваших клиентов) сможете прочитать данные.

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

Ответ 10

  • Editable
  • Считываемый (duh!)
  • Версия для печати
  • Блокнот и vi включены

Самое главное, их функция может быть отделена от содержимого (в основном)

Ответ 11

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

Лично я считаю, что это неверно, и преимущества производительности бинарных файлов должны превзойти этот аргумент, особенно если вы публикуете свой протокол. Однако вездесущность фреймворков на основе XML/HTTP для машинных взаимодействий означает, что их легче принять.

XML используется слишком часто.

Ответ 12

Просто краткая иллюстрация, где удобный для чтения формат документа может быть лучшим выбором:

документы, используемые для развертывания приложения на производстве

Мы использовали наши примечания к выпуску в текстовом формате, но этот документ примечаний к выпуску должен был быть открыт в различных средах (Linux, Solaris) в готовой и производственной таблицах.
Он также должен анализироваться, чтобы извлекать различные данные.

В итоге мы переключились на синтаксис на основе wiki, который по-прежнему хорошо отображался в HTML через wiki, но все еще использовался как простой текстовый файл в другой ситуации.

Ответ 13

В качестве дополнения к этому существуют разные уровни удобочитаемости человека, и все они улучшаются за счет использования хорошего редактора или зрителя с раскраской кода, сгибанием или навигацией.

Например,

  • JSON вполне читаем даже в открытом виде
  • XML имеет налог на угловую привязку, но может использоваться при использовании хорошего редактора
  • INI в основном читается человеком.
  • CSV может быть доступен для чтения, но лучше всего загружать его в электронную таблицу.

Ответ 14

Никто не сказал, так что я: человеческая читаемость на самом деле не является свойством файлового формата (все файлы в конечном итоге являются двоичными), а скорее комбинация файлов и приложений для просмотра.

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

Стандарты кодирования текста широко распространены и достаточно зрелы, а это означает, что они вряд ли будут развиваться в обозримом будущем.

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

Следовательно, преимущества "удобочитаемых" форматов:

  • Ubiquity подходящих зрителей и редакторов.

  • Безвременье (учитывая, что культурные соглашения не будут сильно меняться).

  • Легкость в изучении, чтении и изменении.

Опора на дополнительный уровень абстракции делает текстовые файлы:

  • Пространство голодное.

  • Медленнее для обработки.

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

  • Более быстрая обработка.

  • Меньшая занимаемая площадь.

С другой стороны:

  • Зрители и редакторы специфичны для конкретного двоичного формата и затрудняют взаимодействие.

  • Зрители для любого заданного формата менее широко распространены, потому что они более специализированы.

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

Ответ 15

Сделайте минутку и подумайте о приложении, отличном от веб-разработки.

Предполагается, что: A) Он имеет значение, которое "очевидно" в текстовом формате ложно. Такие вещи, как системы управления сталелитейным заводом или заводом-изготовителем, обычно не имеют преимуществ в отношении того, чтобы быть удобочитаемыми. Программное обеспечение для этих типов сред обычно будет иметь подпрограммы для отображения данных графически значимым образом.

B) Легче выводить текст. Ненужные преобразования, которые на самом деле требуют большего количества кода, делают систему МЕНЬШЕ устойчивой. Дело в том, что если вы НЕ используете язык, который обрабатывает все переменные в виде строк, тогда текст, читаемый человеком, является дополнительным преобразованием. И.Е. Дополнительный код означает больше кода для проверки, тестирования и дополнительных возможностей для интро-ошибок в приложении.

C) Вы все равно должны разбирать. Это много случаев для DSP-систем, над которыми я работал (интерфейс I.E. NO для чтения с человека). Данные выходят из системы в виде пакетов однородного размера. Регистрация данных для анализа и последующей обработки - это просто указание на начало буфера и запись кратного размера блока в систему регистрации данных. Это позволяет мне анализировать данные "нетронутыми", поскольку система клиентов увидит, где, опять же, преобразование его в другой формат приведет к появлению ошибок. Не только это, если вы сохраняете только "преобразованные данные", вы можете потерять информацию в переводе, которая может помочь вам диагностировать проблему.

D) Текст - это естественный формат данных. Нет оборудования, которое я когда-либо видел, использует интерфейс "ТЕКСТ". (Моя первая работа в колледже заключалась в написании драйвера устройства для камеры сканирования камеры.) Система, построенная поверх нее, МОЖЕТ, но для каждого "ПК".

Для веб-страниц, где информация имеет "естественное" значение в текстовом формате, так что обязательно выбейте себя. Конечно, для обработки исходного кода это не проблема. Но всепроникающие вычислительные среды, где даже вы, холодильник и TOOTHBRUSH, должны иметь встроенный процессор, а не столько. Простое обременение этих типов систем с накладными расходами на добавление способности обрабатывать текст вводит неосновательную сложность. Вы не собираетесь связывать "printf" с программным обеспечением для 8-битного микроконтроллера, который управляет мышью. (И да, кто-то должен написать это программное обеспечение тоже.)

Мир не является черным и белым местом, где единственными формами вычислений, которые необходимо учитывать, являются ПК и веб-серверы.

Даже на ПК, если я могу напрямую загружать данные непосредственно в структуру данных, используя один вызов для чтения ОС, и делаю с ним, не записывая процедуры сериализации и десериализации, это фантастически, проверьте выполнение CRC-блоков на следующая проблема.

Ответ 16

Ум... потому что читаемые человеком форматы файлов могут быть прочитаны людьми? Похоже, для меня очень хорошая причина.

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

Ответ 17

Почему я должен использовать читаемый человеком файл формат предпочтительнее двоичного? Есть ли когда-либо ситуация, когда это не так?

Да, сжатые тома (zip, jpeg, mp3 и т.д.) были бы субоптимальными, если бы они были удобочитаемыми для человека.

Ответ 18

Я думаю, что это не очень хорошо в большинстве ситуаций. Я думаю, что основная причина таких форматов, таких как JSON и XML, связана с веб-разработкой и общим использованием в Интернете, где вам нужно обрабатывать данные с пользовательской стороны, и вы не можете читать бинарные данные. Хорошим примером плохого случая для использования читаемого человеком формата будет любая вещь, не являющаяся текстовой, такая как изображения, видео, аудио. Я заметил, что использование не-двоичных форматов используется в веб-разработке, где это не имеет смысла, я чувствую себя виноватым!

Ответ 19

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

Ответ 20

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

Это не попытка запутаться, а просто препятствует пользователю редактировать файл вручную (что может сломать приложение).

Один пример, когда это было бы хорошей идеей, заключается в хранении/сохранении текущих данных о какой-либо игре, т.е. для сохранения вашей игры и продолжения позже. Другие сценарии описывали бы промежуточные файлы, но они, как правило, скомпилированы в байтах/байтах.

Ответ 21

Почему я должен использовать читаемый человеком файл формат предпочтительнее двоичного?

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

Ответ 22

Человеческий формат проще разбирать и отлаживать, если у вас есть проблема с полем (пример: поле содержит число, в котором спецификация говорит, что это поле должно быть строкой), а также формат человека ближе к домену проблема.

Я предпочитаю бинарный формат с большим количеством данных. И я уверен, что у меня есть программное обеспечение для его синтаксического анализа:)

Ответ 23

При чтении Филдинг-диссертации о REST мне очень понравилась концепция "" Архитектурные свойства "; один из которых был" Видимость ". Это то, о чем мы говорим здесь: возможность" видеть" данные. Огромные преимущества при отладке системы.

Один из аспектов, который я считаю отсутствующим в других ответах: обеспечение семантики.

С момента, когда вы идете на чтение для человека, вы позволяете глупому пользователю блокнота создавать данные для подачи в систему. Невозможно гарантировать эти данные. Невозможно гарантировать, что система будет реагировать разумным образом.

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

Ответ 24

Чтение с помощью человека не равно простому анализу машинного кода.

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

Поэтому я согласен с fooobar.com/info/101647/..., который имеет гораздо более глубокое понимание этого вопроса.