5

我有一个类文件,当我在网站上时,会出现以下消息:

类文件“spectrum”中不兼容的魔法值 1768713317。

这个神奇的值是什么意思?请帮忙 :)

4

2 回答 2

10

文件的前四个字节.class(编译的 Java 二进制文件)应该是0xCAFEBABE- 所谓的魔法值

在您的情况下,这些是ASCII 中的1768713317or 0x696C6C65or "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 回答