Зачем нам нужно волшебное число в начале файла .class?

Я прочитал несколько сообщений здесь о магическом числе 0xCAFEBABE в начале каждого файла java .class и хотел знать , почему он нужен - что цель этой маркировки?
Это все еще необходимо? или это просто для обратной совместимости сейчас?

Не удалось найти сообщение, ответившее на этот вопрос - и я не увидел ответ в java spec

Ответ 1

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

Ответ 2

Смотрите: http://www.artima.com/insidejvm/whyCAFEBABE.html

EDIT: http://radio-weblogs.com/0100490/2003/01/28.html

Некоторые ответы:

Ну, они, вероятно, должны были выбрать что-то как их магическое число определить файлы классов, а ограничить количество Java или кофе связанные слова, вы можете придумать используя только буквы A-F: -)

-

Что касается того, почему магическое число 3405691582 (0xCAFEBABE), ну, я думаю заключается в том, что (a) 32-битные магические числа легче обрабатывать и, скорее всего, уникальный, и (б) команда Java хотела что-то с Java-кофе метафоры, и поскольку там нет "J" или "V" в шестнадцатеричном формате, рассчитан на что-то с CAFE в нем. Я полагаю они решили, что "CAFE BABE" был сексуальнее чем что-то вроде "FAB CAFE" или "CAFE FACE", и определенно не как последствия "CAFE A FAD", (или, что еще хуже, "BAD CAFE" ).

-

Не знаю, почему я пропустил это раньше, но они могли бы использовать число 12648430, если вы решите прочитать шестнадцатеричные нули в качестве буквы "O". Что дает 0xC0FFEE или 0x00C0FFEE для укажите все 32 бита. OO КОФЕ? объект Ориентированный, конечно...: -)

-

Я изначально видел 0xCAFEBABE как волшебство номер, используемый NeXTSTEP. NX использовал "жир" двоичные файлы ", которые были в основном бинарные файлы для разных платформ вместе в одном исполняемом файле. Если вы работали на NX Intel, это запустить двоичный файл Intel; если на HP это будет запускать двоичный файл HP. 0xCAFEBABE было волшебным числом, чтобы отличить либо Intel, либо Motorola двоичные файлы (не помню, какие).

Ответ 3

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

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

Ответ 4

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