类文件中不兼容的魔术值1768713317

时间:2012-09-01 19:35:04

标签: java

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

  

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

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

2 个答案:

答案 0 :(得分:10)

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

在您的情况下,这些是ASCII中的17687133170x696C6C65"ille" ille ... gal ?)。很可能一些JVM试图打开一个文件,认为这是字节码,而它实际上是一个文本文件。也许可以下载类,但服务器会返回一些错误?

答案 1 :(得分:5)

Magic number是每个编译的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读取文件且幻数无效时,它将不执行它。