Что значит сделать файл двоичным?

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


Ответы (1 шт):

Автор решения: rotabor

Подредактировал ответ, вынеся формальные определения вперёд, а прежнюю лирику оставив в конце.

Формально

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

Если в файле есть только текстовая информация, закодированная в одной из текстовых кодировок, то такой файл мы называем текстовым. А все остальные файлы - двоичные. Это определение закрепилось ещё на заре компьютерной эпохи.

Двоичные файлы могут включать текстовые куски.

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

  1. При чтении информации из файла числа считаются кодами символов (в какой-то кодировке), и результатом является строка этих символов.
  2. При записи строки в файл записываются коды символов.

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

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

В ОС для начального определения типа файла используются расширения имён файлов, и ОС откроет файл с помощью приложения, с которым ассоциировано расширение. Например, файлы с расширениями txt, ini, log, xml, htm(l) содержат, скорее всего, текстовую информацию.


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

copy afile.txt con

Лирика

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

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

Те же самые числа, но записанные текстом, тоже хранятся в виде целых чисел - кодов символов, но такое представление мы уже называем текстовым.

Картинки - тоже двоичные файлы, но информация там не двоичная.

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

Даже текст можно хранить с помощью текстового кодирования, а можно и в виде изображения.

Ещё один случай - это исполняемые файлы. В UNIX, по-моему, они имеют расширение bin (binary). Да, это программа (и данные) в машинном виде, в отличие от записи программы текстом в исходном файле.

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

Например, на более высоком уровне абстракции. Текстовый файл, ASCII. Человек видит буквы, цифры, символы. Но что написано - он не понимает. Или это на другом языке, или зашифровано. Можем в текстовом файле написать 01000001 01000010. И что это? А это AB.

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

→ Ссылка