5

クラスファイルがあり、Webサイトにアクセスすると、次のメッセージが表示されます。

クラスファイル「spectrum」の互換性のないマジック値1768713317。

この魔法の値はどういう意味ですか?助けてください :)

4

2 に答える 2

10

.classファイル (コンパイルされた Java バイナリ)の最初の 4 バイトは0xCAFEBABE、いわゆるマジック値である必要があります。

あなたの場合、これらはASCII の1768713317or0x696C6C65または"ille"( ille...gal ?) です。ほとんどの場合、一部の JVM はこれがバイトコードであると考えてファイルを開こうとしますが、実際にはテキスト ファイルです。おそらくクラスはダウンロードされるはずでしたが、サーバーは代わりにエラーを返しましたか?

于 2012-09-01T19:39:10.643 に答える
5

マジック ナンバーは、コンパイルされた各 Java クラスの最初の 4 バイトです。これは、コンパイルされた Java クラスの構造です。

ClassFile {
    u4             magic;
    u2             minor_version;
    u2             major_version;
    u2             constant_pool_count;
    cp_info        constant_pool[constant_pool_count-1];
    u2             access_flags;
    u2             this_class;
    u2             super_class;
    u2             interfaces_count;
    u2             interfaces[interfaces_count];
    u2             fields_count;
    field_info     fields[fields_count];
    u2             methods_count;
    method_info    methods[methods_count];
    u2             attributes_count;
    attribute_info attributes[attributes_count];
}

'magic' は常に次の値に等しくなければなりません: 0xCAFEBABE. JVM に「やあ、私は Java クラスです。私のコードを実行できます!」と伝えます。JVM がファイルを読み取り、マジック ナンバーが有効でない場合、そのファイルは実行されません。

于 2012-09-01T19:39:38.897 に答える