- Формат файла
- Содержание
- Спецификации
- Определение типа файла
- Расширение имени файла
- Магические числа
- Метаданные
- Формат файла — File format
- Содержание
- Технические характеристики
- Патенты
- Определение типа файла
- Расширение имени файла
- Внутренние метаданные
- Заголовок файла
- Магическое число
- Унифицированные идентификаторы типа (UTI) Mac OS X
- Расширенные атрибуты OS / 2
- Расширенные атрибуты POSIX
- Уникальные идентификаторы PRONOM (PUID)
- Типы MIME
- Идентификаторы формата файла (FFID)
- Идентификация формата на основе содержимого файла
- Структура файла
- Неструктурированные форматы (необработанные дампы памяти)
- Форматы на основе блоков
- Справочник форматы на основе
Формат файла
Формат — спецификация структуры данных, записанных в компьютерном файле. Формат файла обычно указывается в его имени, как часть, отделённая точкой (обычно эту часть называют расширением имени файла, хотя, строго говоря, это неверно). Например, окончание имени (расширение) «.txt» обычно используют для обозначения файлов, содержащих только текстовую информацию, а «.doc» — содержащих текстовую информацию, структурированную в соответствии со стандартами программы Microsoft Word. Файлы, содержимое которых соответствует одному формату (реже — одному семейству форматов), иногда называют файлами одного типа.
Так как общепринятая в вычислительной технике концепция файла — неструктурированная последовательность байтов, компьютерные программы, сохраняющие в файлах структурированные данные, должны как-то преобразовывать их в последовательность байтов и наоборот (в ООП эти операции называются, соответственно, «сериализацией» и «десериализацией»; для текстовой информации последнее также называется «разбор» или «парсинг»). Алгоритм этого преобразования, а также соглашения о том, как различные фрагменты информации располагаются внутри файла, и составляют его «формат».
Различные форматы файлов могут различаться степенью детализации, один формат может быть «надстройкой» над другим или использовать элементы других форматов. Например, текстовый формат накладывает только самые общие ограничения на структуру данных. Формат HTML устанавливает дополнительные правила на внутреннее устройство файла, но при этом любой HTML-файл является в то же время текстовым файлом.
Содержание
Спецификации
Для многих форматов файлов существуют опубликованные спецификации, в которых подробно описана структура файлов данного формата, то, как программы должны кодировать данные для записи в этот формат и как декодировать их при чтении. Большинство таких спецификаций свободно доступны, некоторые распространяются за плату.
Иногда компании могут считать определённые форматы файлов своей коммерческой тайной и не публиковать их. Хорошо известный пример — форматы файлов пакета Microsoft Office. В некоторых случаях компания, выпустившая приложение, просто не считает нужным тратить время на написание подробной спецификации.
Если спецификация формата недоступна, то для обеспечения совместимости программы с данным форматом приходится заниматься обратной разработкой. В большинстве или во всех странах форматы файлов не защищены законами об авторских правах. Однако в некоторых странах патентами могут быть защищены алгоритмы, используемые для кодирования данных в какой-либо формат. Например, в широко распространённом формате GIF использовался патентованный алгоритм (срок действия патентов в разных странах истек в 2003-2004 гг.), что привело к разработке альтернативного формата PNG.
Определение типа файла
Для того, чтобы правильно работать с файлами, программы должны иметь возможность определять их тип. По историческим причинам, в разных операционных системах используются разные подходы для решения этой задачи.
Расширение имени файла
Некоторые операционные системы, например, CP/M, DOS, и Microsoft Windows используют для определения типа файла часть его имени, т. е. «расширение имени файла». В старых операционных системах это были три символа, отделённые от имени файла точкой (в файловых системах семейства FAT имя и расширение хранились отдельно, точка добавлялась уже на уровне ОС); в более новых системах расширение может являться просто частью имени, и тогда его длина ограничена только неиспользованной длиной имени (которая может составлять, например, 255 символов). Например, HTML-файлам может соответствовать расширение «.htm» или «.html».
Пользователь может свободно изменить расширение файла. Поскольку многие оболочки пользователя используют расширение, чтобы определить программу, с помощью которой нужно открыть файл, это может сделать последний недоступным для работы или вообще «потерять», если пользователь забудет исходное расширение. Поэтому Windows Explorer по умолчанию скрывает расширения. Эта практика имеет и обратную сторону: так как расширение файла не видно, можно обмануть пользователя, заставив его думать, что, например, файл с расширением .exe — изображение с другим расширением. В то же время, опытный пользователь может использовать возможность изменить назначенный файлу тип, просто сменив расширение, чтобы открыть его в другой программе, не указывая её напрямую. Это может быть полезно, если в программе не предусмотрено открытие файлов с каким‑то расширением, а пользователь знает, что их формат подходит для обработки в данной программе.
Магические числа
Другой способ, широко используемый в UNIX-подобных операционных системах, заключается в том, чтобы сохранить в самом файле некое «магическое число» (сигнатуру) — последовательность символов, по которой может быть опознан формат файла. Первоначально этот термин использовался для специального набора 2-байтовых идентификаторов, сохраняемых в начале файла (эта практика перекочевала и в другие ОС, например, MZ в MS-DOS), однако, любая последовательность символов, характерная для данного формата, может быть использована как «магическое число».
Для определения формата файла служит команда file, которая использует файл /usr/share/misc/magic
Метаданные
Некоторые файловые системы позволяют сохранять дополнительные атрибуты для каждого файла, т. е. «метаданные». Эти метаданные можно использовать для хранения информации о типе файла. Такой подход используется в компьютерах Apple Macintosh. Метаданные поддерживаются такими современными файловыми системами как HPFS, NTFS, ext2, ext3 и другими. Недостатком этого метода является плохая переносимость — при копировании файлов между файловыми системами разных типов метаданные могут быть потеряны.
Типы данных, определённые стандартом MIME, широко используются в различных сетевых протоколах, однако в файловых системах они пока применяются редко.
Источник
Формат файла — File format
A формат файла — это стандартный способ кодирования информации для хранения в компьютерном файле . Он определяет, как биты используются для кодирования информации на цифровом носителе. Форматы файлов могут быть проприетарными или бесплатными и могут быть неопубликованными или открытыми.
Некоторые форматы файлов предназначены для очень определенных типов данных: файлы PNG , например, для хранения битовых изображенийизображений с использованием без потерь сжатие данных . Однако другие форматы файлов предназначены для хранения нескольких различных типов данных: формат Ogg может действовать как контейнер для различных типов мультимедиа , включая любые комбинация аудио и видео с текстом или без текста (например, субтитры ) и метаданных . Текстовый файл может содержать любой поток символов, включая возможные управляющие символы , и кодируется в одной из различных схем кодирования символов . Некоторые форматы файлов, такие как HTML , масштабируемая векторная графика и исходный код из компьютерного программного обеспечения , представляют собой текстовые файлы с определенным синтаксисы , которые позволяют использовать их для определенных целей.
Содержание
Технические характеристики
Форматы файлов часто имеют опубликованную спецификацию , описывающую метод кодирования и позволяющую тестировать предполагаемую функциональность программы. Не все форматы имеют свободно доступные документы спецификаций, отчасти потому, что некоторые разработчики рассматривают свои документы со спецификациями как коммерческую тайну , а отчасти потому, что другие разработчики никогда не создают формальный документ спецификации, позволяя создавать прецеденты другим уже существующим программам, которые format определяет формат через то, как эти существующие программы его используют.
Если разработчик формата не публикует бесплатные спецификации, другой разработчик, желающий использовать этот тип файла, должен либо перепроектировать файл, чтобы узнать, как его читать, либо получить документ спецификации от разработчиков формата за плату и путем подписания соглашения о неразглашении . Последний подход возможен только при наличии официального документа спецификации. Обе стратегии требуют значительного времени, денег или того и другого; поэтому форматы файлов с общедоступными спецификациями, как правило, поддерживаются большим количеством программ.
Патенты
Патентный закон , а не авторское право , чаще используется для защиты формата файла. Хотя патенты на форматы файлов прямо не разрешены законодательством США, некоторые форматы кодируют данные с использованием запатентованных алгоритмов . Например, использование сжатия с форматом файла GIF требует использования запатентованного алгоритма, и, хотя патентообладатель изначально не обеспечивал соблюдение своего патента, позже он начал собирать роялти . Это привело к значительному сокращению использования GIF-файлов и частично отвечает за разработку альтернативного формата PNG . Однако патент GIF истек в США в середине 2003 года, а во всем мире — в середине 2004 года.
Определение типа файла
В различных операционных системах традиционно использовались разные подходы к определению формата конкретного файла, причем каждый подход имел свои преимущества и недостатки. Большинство современных операционных систем и отдельных приложений должны использовать все следующие подходы для чтения «чужих» форматов файлов, если не работают с ними полностью.
Расширение имени файла
Один популярный метод, используемый многими операционными системами, включая Windows , macOS , CP / M , DOS , VMS и VM / CMS предназначены для определения формата файла на основе конца его имени, а точнее букв, следующих за последней точкой. Эта часть имени файла известна как расширение имени файла . Например, документы HTML идентифицируются по именам, которые заканчиваются на .html (или
Одним из артефактов этого подхода является то, что систему можно легко обманом заставить трактовать файл как другой формат, просто переименовав его — например, файл HTML можно легко рассматривать как обычный текст , переименовав его с
Это привело к тому, что более свежие оболочки операционной системы , такие как Windows 95 и Mac OS X, скрывали расширение при перечислении файлов. Это предотвращает случайное изменение пользователем типа файла и позволяет опытным пользователям отключать эту функцию и отображать расширения.
Скрытие расширения, однако, может создать видимость двух или более одинаковых имен файлов в одной папке. Например, может потребоваться логотип компании как в формате
Скрытие расширений также может представлять угрозу безопасности. Например, злоумышленник может создать исполняемую программу с невинным именем, например «
Внутренние метаданные
Второй способ определить формат файла — использовать информацию о формате, хранящемся внутри самого файла, либо информацию, предназначенную для этой цели, либо двоичные строки которые всегда находятся в определенных местах в файлах некоторых форматов. Так как их легче всего найти в начале, такая область обычно называется заголовком файла, если она превышает несколько байт , или магическим числом, если она составляет всего несколько байтов.
Заголовок файла
Метаданные, содержащиеся в заголовке файла , обычно хранятся в начале файла, но могут присутствовать и в других областях, часто включая конец в зависимости от формата файла или типа содержащихся данных. Символьные (текстовые) файлы обычно имеют символьные заголовки, тогда как двоичные форматы обычно имеют двоичные заголовки, хотя это не является правилом. Текстовые заголовки файлов обычно занимают больше места, но, поскольку они удобочитаемы, их можно легко изучить с помощью простого программного обеспечения, такого как текстовый редактор или шестнадцатеричный редактор.
Помимо определения формата файла, заголовки файлов могут содержать метаданные о файле и его содержимом. Например, в большинстве файлов изображений хранится информация о формате изображения, размере, разрешении и цветовом пространстве , и, необязательно, информация об авторинге , например, кто создал изображение, когда и где это было сделано, какая модель камеры и какие фотографические настройки использовались (Exif ) и т. д. Такие метаданные могут использоваться программным обеспечением для чтения или интерпретации файла во время процесса загрузки и после него.
Заголовки файлов могут использоваться операционной системой для быстрого сбора информации о файле без загрузки всей ее в память, но при этом используются больше ресурсов компьютера, чем при чтении непосредственно из каталога Информация. Например, когда графическийфайловый менеджер должен отображать содержимое папки, он должен прочитать заголовки многих файлов, прежде чем сможет отобразить соответствующие значки, но они будут расположены в разных местах на носителе, что требует больше времени для доступа. Папка, содержащая множество файлов со сложными метаданными, такими как информация эскиза , может потребовать значительного времени, прежде чем ее можно будет отобразить.
Если заголовок жестко запрограммирован в двоичном коде , так что сам заголовок требует сложной интерпретации для распознавания, особенно для защиты содержимого метаданных, существует риск того, что формат файла может быть неверно истолкованным. Возможно, это даже было плохо написано в источнике. Это может привести к повреждению метаданных, что в крайне плохих случаях может даже сделать файл нечитаемым.
Более сложным примером заголовков файлов являются те, которые используются для форматов файлов оболочки (или контейнера) .
Магическое число
Один из способов включения метаданных типа файла, часто связанных с Unix и его производными, — это просто сохранить «магическое число» внутри самого файла. Первоначально этот термин использовался для определенного набора 2-байтовых идентификаторов в начале файлов, но поскольку любую двоичную последовательность можно рассматривать как число, для идентификации можно использовать любую особенность формата файла, которая однозначно ее отличает. Например, изображения GIF всегда начинаются с представления ASCII либо
Унифицированные идентификаторы типа (UTI) Mac OS X
Унифицированный идентификатор типа (UTI) — это метод, используемый в macOS для однозначной идентификации «типизированных» классов сущностей, например, форматы файлов. Он был разработан Apple в качестве замены OSType (коды типа и создателя).
UTI — это строка Core Foundation , в которой используется строка обратного DNS . Некоторые общие и стандартные типы используют домен под названием
Помимо форматов файлов, UTI также могут использоваться для других сущностей, которые могут существовать в macOS, включая:
- данные Pasteboard
- Папки (каталоги)
- переводимый типы (обрабатываемые диспетчером переводов)
- Bundles
- Frameworks
- Streaming data
- Псевдонимы и символические ссылки
Расширенные атрибуты OS / 2
Файловые системы HPFS , FAT12 и FAT16 (но не FAT32) позволяют хранить «расширенные атрибуты» с файлами. Они включают произвольный набор триплетов с именем, закодированным типом значения и значением, причем имена уникальны, а значения могут иметь длину до 64 КБ. Существуют стандартизированные значения для определенных типов и имен (в OS / 2 ). Одна из них заключается в том, что расширенный атрибут «.TYPE» используется для определения типа файла. Его значение содержит список из одного или нескольких типов файлов, связанных с файлом, каждый из которых является строкой, например «Обычный текст» или «HTML-документ». Таким образом, файл может иметь несколько типов.
Файловая система NTFS также позволяет хранить расширенные атрибуты OS / 2 в качестве одной из вилок файлов, но эта функция просто присутствует для поддержки подсистемы OS / 2 (отсутствует в XP ), поэтому подсистема Win32 обрабатывает эту информацию как непрозрачный блок данных и не использует ее. Вместо этого он полагается на другие вилки файлов для хранения метаинформации в специфичных для Win32 форматах. Расширенные атрибуты OS / 2 могут по-прежнему считываться и записываться программами Win32, но данные должны полностью анализироваться приложениями.
Расширенные атрибуты POSIX
В Unix и Unix-подобных системах: ext2 , ext3 , ReiserFS Файловые системы версии 3, XFS , JFS , FFS и HFS + позволяют хранить расширенные атрибуты с файлами. Они включают произвольный список строк «name = value», где имена уникальны, а к значению можно получить доступ через связанное с ним имя.
Уникальные идентификаторы PRONOM (PUID)
Постоянный уникальный идентификатор PRONOM (PUID) — это расширяемая схема постоянных, уникальных и однозначных идентификаторов для форматов файлов, которая была разработан Национальным архивом Великобритании как часть службы технического реестра PRONOM . PUID могут быть выражены как унифицированные идентификаторы ресурсов с использованием
info: pronom / namespace. Хотя схема PUID еще не широко используется за пределами правительства Великобритании и некоторых программ цифрового сохранения , она обеспечивает большую степень детализации, чем большинство альтернативных схем.
Типы MIME
Типы MIME широко используются во многих приложениях, связанных с Интернетом , и все чаще в других местах, хотя их использование для информации о типах на диске редко. Они состоят из стандартизированной системы идентификаторов (управляемых IANA ), состоящей из типа и подтипа, разделенных косой чертой , например,
Однако есть проблемы с типами MIME; несколько организаций и людей создали свои собственные типы MIME, не зарегистрировав их должным образом в IANA, что в некоторых случаях делает использование этого стандарта неудобным.
Идентификаторы формата файла (FFID)
Идентификаторы формата файла — еще один, не широко используемый способ идентификации форматов файлов в соответствии с их происхождением и их категорией. Он был создан для пакета программного обеспечения Description Explorer. Он состоит из нескольких цифр вида NNNNNNNNN-XX-YYYYYYY . Первая часть указывает на происхождение / обслуживающего лица организации (это число представляет собой значение в базе данных компании / организации по стандартизации), две следующие цифры обозначают тип файла в шестнадцатеричном формате . Последняя часть состоит из обычного расширения имени файла или международного стандартного номера файла, дополненного нулями слева. Например, спецификация файла PNG имеет FFID 000000001-31-0015948 , где 31 указывает файл изображения, 0015948 — стандартный номер, а 000000001 обозначает Международную организацию по стандартизации (ISO).
Идентификация формата на основе содержимого файла
Другим, но менее популярным способом определения формата файла является исследование содержимого файла на наличие различимых шаблонов среди типов файлов. Содержимое файла представляет собой последовательность байтов, а байт имеет 256 уникальных перестановок (0–255). Таким образом, подсчет появления байтовых шаблонов, который часто называют частотным распределением байтов, дает различимые шаблоны для идентификации типов файлов. Существует множество схем идентификации типов файлов на основе содержимого, которые используют частотное распределение байтов для построения репрезентативных моделей для типов файлов и используют любые статистические методы и методы интеллектуального анализа данных для определения типов файлов
Структура файла
Там Есть несколько типов способов структурировать данные в файле. Самые обычные описаны ниже.
Неструктурированные форматы (необработанные дампы памяти)
В более ранних форматах файлов использовались необработанные форматы данных, которые состояли из прямого сброса образов памяти одной или нескольких структур в файл.
У этого есть несколько недостатков. Если образы памяти также не имеют зарезервированных мест для будущих расширений, расширение и улучшение этого типа структурированного файла очень сложно. Он также создает файлы, которые могут быть специфичными для одной платформы или языка программирования (например, структура, содержащая строку Pascal , не распознается как таковая в C ). С другой стороны, разработать инструменты для чтения и записи файлов такого типа очень просто.
Ограничения неструктурированных форматов привели к развитию других типов форматов файлов, которые можно было легко расширять и в то же время быть обратно совместимыми.
Форматы на основе блоков
В такой файловой структуре каждый фрагмент данных встроен в контейнер, который каким-то образом идентифицирует данные. Область действия контейнера может быть идентифицирована с помощью каких-либо маркеров начала и конца, определенного где-нибудь явного поля длины или фиксированных требований к определению формата файла.
На протяжении 1970-х годов многие программы использовали форматы такого общего типа. Например, текстовые процессоры, такие как troff , Script и Scribe , и файлы экспорта базы данных, такие как CSV . Electronic Arts и Commodore — Amiga также использовали этот тип файлового формата в 1985 году с их форматом файлов IFF (Interchange File Format).
Контейнер иногда называют «чанком», хотя «чанк» также может означать, что каждый кусок небольшой и / или что чанки не содержат других чанков; многие форматы не предъявляют этих требований.
Информация, которая идентифицирует конкретный «блок», может называться множеством разных терминов, часто включая термины «имя поля», «идентификатор», «метка» или «тег». Идентификаторы часто удобочитаемы и классифицируют части данных: например, как «фамилия», «адрес», «прямоугольник», «название шрифта» и т. Д. Это не то же самое, что идентификаторы в смысле ключа базы данных или серийного номера (хотя идентификатор вполне может идентифицировать свои связанные данные как такой ключ).
При таком типе файловой структуры инструменты, которым неизвестны определенные идентификаторы блоков, просто пропускают те, которые им неизвестны. В зависимости от фактического значения пропущенных данных, это может быть полезно или бесполезно (CSS явно определяет такое поведение).
Эта концепция использовалась снова и снова в потоках, закодированных с помощью RIFF (эквивалент Microsoft-IBM IFF), PNG, хранилище JPEG, DER (Distinguished Encoding Rules ). и файлы (которые были первоначально описаны в CCITT X.409: 1984 и, следовательно, предшествовали IFF), и Формат обмена структурированными данными (SDXF) .
Действительно, любой формат данных должен как-то определять значимость его составных частей, и встроенные маркеры границ — очевидный способ сделать это:
- заголовки MIME делают это с разделенной двоеточием меткой в начале каждой логической строки. Заголовки MIME не могут содержать другие заголовки MIME, хотя в содержимом данных некоторых заголовков есть части, которые могут быть извлечены с помощью других соглашений.
- CSV и аналогичные файлы часто делают это с помощью записей заголовков с именами полей и с запятыми для обозначения границ поля. Как и MIME, CSV не предусматривает структур с более чем одним уровнем.
- XML и его аналог можно в общих чертах рассматривать как формат на основе фрагментов, поскольку элементы данных идентифицируются разметкой, которая похожа на идентификаторы фрагментов. . Однако он имеет формальные преимущества, такие как схемы и проверка , а также возможность представлять более сложные структуры, такие как деревья , DAG и диаграммы . Если XML считается форматом «фрагментов», то SGML и его предшественник IBM GML являются одними из самых ранних примеров таких форматов.
- JSON похож на XML без схемы, перекрестные ссылки или определение значения повторяющихся имен полей, и это часто удобно для программистов.
- YAML похож на JSON, но использует отступы для разделения блоков данных и стремится быть более человечным -читаемы, чем JSON или XML.
- Буферы протокола , в свою очередь, похожи на JSON, в частности, заменяя маркеры границ в данных номерами полей, которые отображаются в / из имен каким-либо внешним механизмом.
Справочник форматы на основе
Это еще один расширяемый формат, который очень похож на файловую систему (OLE Документы — это фактические файловые системы), где файл состоит из «записей каталога», которые содержат расположение данные в самом файле, а также его подписи (и в некоторых случаях его тип). Хорошими примерами этих типов файловых структур являются образы дисков , документы OLE TIFF , библиотеки . ODT и DOCX, основанные на PKZIP , разбиты на блоки и также несут каталог.
Источник