13

0xCAFEBABEここで、各 Java .classファイルの先頭にあるマジック ナンバーに関するいくつかの投稿を読み、なぜそれが必要なのかを知りたいと思いました。このマーキングの目的は何ですか?
今でも必要ですか?それとも下位互換性のためだけですか?

これに答える投稿が見つかりませんでした-Java仕様にも答えがありませんでした

4

4 に答える 4

9

マジック ナンバーは、基本的にファイル形式の識別子です。たとえば、JPEG は常に FFD8 で始まります。Java 自体には必要ありません。単にファイル タイプを識別するのに役立ちます。マジック ナンバーの詳細については、こちらをご覧ください。

于 2011-04-26T21:13:41.993 に答える
4

参照: http://www.artima.com/insidejvm/whyCAFEBABE.html

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

いくつかの答え:

おそらく、彼らはクラス ファイルを識別するためのマジック ナンバーとして何かを選択する必要がありました。また、AF の文字だけを使用して思いつくことができる Java またはコーヒー関連の単語の数には制限があります :-)

-

マジック ナンバーが 3405691582 (0xCAFEBABE) である理由については、(a) 32 ビットのマジック ナンバーの方が扱いやすく、一意である可能性が高いため、(b) Java チームは Java-coffee比喩であり、16 進数には「J」や「V」がないため、CAFE を含むものに落ち着きました。彼らは「CAFE BABE」が「A FAB CAFE」や「CAFE FACE」などよりもセクシーだと考えたのでしょう。

-

以前にこれを見逃した理由はわかりませんが、16 進数のゼロを文字「O」と読むことを選択した場合、12648430 という数字が使用された可能性があります。これにより、32 ビットすべてを指定する 0xC0FFEE または 0x00C0FFEE が得られます。オーコーヒー?もちろん、オブジェクト指向... :-)

-

私はもともと 0xCAFEBABE を NeXTSTEP が使用するマジック ナンバーと見なしていました。NX は「ファット バイナリ」を使用しました。これは基本的に、異なるプラットフォーム用のバイナリを 1 つの実行可能ファイルにまとめたものです。NX Intel で実行している場合は、Intel バイナリが実行されます。HP の場合、HP バイナリを実行します。0xCAFEBABE は、Intel と Motorola のバイナリを区別するためのマジック ナンバーです (どちらかは思い出せません)。

于 2011-04-26T21:11:14.847 に答える
3
于 2011-04-26T21:13:59.880 に答える
2

バイナリ ファイルの先頭にある種の固定識別子を付けるのはかなり一般的な方法です (たとえば、zip ファイルは文字 PK で始まります)。これにより、誤って間違った種類のファイルをクラス ファイルとして解釈しようとする可能性が減少します。

于 2011-04-26T21:14:02.040 に答える