【问题标题】:Incompatible magic value 1768713317 in class file类文件中不兼容的魔法值 1768713317
【发布时间】:2012-08-27 04:22:35
【问题描述】:

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

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

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

【问题讨论】:

标签: java


【解决方案1】:

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

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

【讨论】:

  • 抱歉这个问题,ille 是什么意思?我必须在哪里添加魔法值?
  • @narf:这意味着一些 JVM 试图加载一个不是真正编译的 Java 的类,但可能是一些文本文件。如果您拍摄 JPG 图像并将其扩展名更改为 .EXE,您很可能也会遇到某种错误。抱歉,您的问题太笼统了,能否提供更多细节?
【解决方案2】:

幻数是每个已编译 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读取一个文件并且magic number无效时它不会执行它。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-12-21
  • 2012-08-24
  • 2016-06-11
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
相关资源
最近更新 更多