【问题标题】:Why do we need a magic number in the beginning of the .class file?为什么我们在 .class 文件的开头需要一个幻数?
【发布时间】:2011-08-13 09:07:56
【问题描述】:

我在这里阅读了一些关于每个 java .class 文件开头的幻数0xCAFEBABE 的帖子,并想知道为什么需要它 - 什么是这个标记的目的是什么?
它还需要吗?还是现在只是为了向后兼容?

找不到回答这个问题的帖子 - 我也没有在 java spec 中看到答案

【问题讨论】:

  • 为什么要关心 .class 文件中的内容? .class文件被编译,你应该只关心.java文件。
  • 是的,VM 从来没有真正需要工作,它只是为了能够将 Java 类文件与其他类型的文件区分开来,即使文件名未知。 (不过,VM 并未将其用于此目的。)
  • @Nik - 这是一个出于兴趣的问题 - 我遇到了一个我不熟悉的术语,在阅读后我对此感到困惑。这不像我现在要写一个.class 文件解析器......
  • @Nik 如果您有兴趣进行任何字节码读取和/或操作,那么您将对 .class 文件非常感兴趣。

标签: java magic-numbers


【解决方案1】:

见:http://www.artima.com/insidejvm/whyCAFEBABE.html

编辑:和http://radio-weblogs.com/0100490/2003/01/28.html

一些答案​​:

嗯,他们大概不得不选择 像他们的神奇数字一样的东西 识别类文件,并且有一个 限制有多少 Java 或咖啡 你能想出的相关词 仅使用字母 A-F :-)

-

至于为什么神奇的数字是 3405691582(0xCAFEBABE),我猜 是 (a) 32 位幻数是 更容易处理,更有可能 独一无二,并且 (b) Java 团队想要 Java 咖啡的东西 隐喻,因为没有“J”或 'V' 十六进制,设置为 里面有 CAFE 的东西。我猜 他们认为“CAFE BABE”更性感 而不是像“A FAB CAFE”或 “CAFE FACE”,绝对没有 就像“CAFE A FAD”的含义 (或更糟的是,“一家糟糕的咖啡馆”)。

-

不知道为什么我以前错过了这个, 但他们可以使用了这个号码 12648430,如果您选择阅读 十六进制零作为字母“O”。那 给你 0xC0FFEE 或 0x00C0FFEE 到 指定所有 32 位。哦咖啡?目的 定向的,当然... :-)

-

我最初将 0xCAFEBABE 视为一种魔法 NeXTSTEP 使用的编号。 NX用“肥 二进制文件”,基本上是 不同平台的二进制文件卡住了 一起放在一个可执行文件中。如果 你在 NX Intel 上运行,它会 运行英特尔二进制文件;如果在 HP 上,它 将运行 HP 二进制文件。 0x咖啡宝贝 是区分的神奇数字 英特尔或摩托罗拉 二进制文件(不记得是哪个)。

【讨论】:

    【解决方案2】:

    幻数基本上是文件格式的标识符。例如,JPEG 总是以 FFD8 开头。 Java 本身不需要它,它只是帮助识别文件类型。您可以阅读有关幻数的更多信息here

    【讨论】:

    • 如果 Java 不需要它 - 为什么当 .class 文件不是真正的类时我们会收到“Bad magic number”错误?
    • @RonK:这是一个额外的健全性检查。每个java编译器都会把正确的幻数放在类文件的前面,如果丢失了,那就有问题了。如果你愿意的话,有点像校验和,虽然我不太喜欢这种比较。
    【解决方案3】:

    Magic numbers 是一种常用技术,可以使文件等内容可识别。

    这个想法是,您只需读取文件的前几个字节即可知道这是否很可能是 Java 类文件。如果第一个字节不等于幻数,那么您肯定知道它不是一个有效的 Java 类文件。

    【讨论】:

      【解决方案4】:

      在二进制文件的开头有某种固定标识符是相当普遍的做法(例如,zip 文件以字符 PK 开头)。这减少了意外尝试将错误类型的文件解释为类文件的可能性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-09
        • 2011-03-01
        • 2013-12-03
        • 1970-01-01
        相关资源
        最近更新 更多