Зачем нам нужен магический номер в начале файла .class? - PullRequest
13 голосов
/ 27 апреля 2011

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

Не могу найти пост, который отвечает на это - и я не видел ответ в Java spec

Ответы [ 4 ]

9 голосов
/ 27 апреля 2011

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

4 голосов
/ 27 апреля 2011

См .: http://www.artima.com/insidejvm/whyCAFEBABE.html

РЕДАКТИРОВАТЬ: и http://radio -weblogs.com / 0100490/2003/01 / 28.html

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

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

-

Почему магическое число 3405691582 (0xCAFEBABE), хорошо мое предположение является то, что (а) 32-битные магические числа легче обращаться и с большей вероятностью уникальный, и (б) команда Java хотела что-то с Java-кофе метафора, и так как нет 'J' или 'V' в шестнадцатеричной системе счисления что-то с КАФЕ в нем. Похоже они полагали, что "Кафе BABE" был более сексуальным чем-то вроде "FAB CAFE" или "КАФЕ ЛИЦО", и определенно не сделал как последствия "CAFE A FAD" (или хуже, "ПЛОХОЕ КАФЕ").

-

Не знаю, почему я пропустил это раньше, но они могли бы использовать номер 12648430, если вы решите прочитать шестнадцатеричные нули как буква «О». Тот дает вам 0xC0FFEE или 0x00C0FFEE для указать все 32 бита. Оо кофе? объект Ориентирован, конечно ...: -)

-

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

3 голосов
/ 27 апреля 2011

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

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

2 голосов
/ 27 апреля 2011

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

...