我有一个类文件,当我在网站上时,会出现以下消息:
类文件“spectrum”中不兼容的魔法值 1768713317。
这个神奇的值是什么意思?请帮忙 :)
文件的前四个字节.class
(编译的 Java 二进制文件)应该是0xCAFEBABE
- 所谓的魔法值。
在您的情况下,这些是ASCII 中的1768713317
or 0x696C6C65
or "ille"
( ille...gal ?) 。很可能一些 JVM 试图打开一个认为这是字节码的文件,而它实际上是一个文本文件。也许应该下载类但服务器返回一些错误?
幻数是每个已编译 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 读取文件并且幻数无效时,它不会执行它。