我在这里读了一些关于神奇数字的帖子 0xCAFEBABE
在每个java的开头 。类 文件,想知道 为什么 需要 - 这个标记的目的是什么?
还需要它吗?或者它现在只是为了向后兼容?
找不到回答这个问题的帖子 - 我也没有在java中看到答案 规范
我在这里读了一些关于神奇数字的帖子 0xCAFEBABE
在每个java的开头 。类 文件,想知道 为什么 需要 - 这个标记的目的是什么?
还需要它吗?或者它现在只是为了向后兼容?
找不到回答这个问题的帖子 - 我也没有在java中看到答案 规范
幻数基本上是文件格式的标识符。例如,JPEG始终以FFD8开头。 Java本身没有必要,它只是帮助识别文件类型。您可以阅读有关魔术数字的更多信息 这里。
魔术数字 是一种常见的技术,可以识别文件等文件。
这个想法是你只需要读取文件的前几个字节,以了解这是否很可能是一个Java类文件。如果第一个字节不等于幻数,那么您肯定知道它不是有效的Java类文件。
看到: 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”的含义 (或者更糟糕的是,“A BAD CAFE”)。
-
不知道为什么我之前错过了这个, 但他们 可以 使用了这个号码 12648430,如果你选择阅读 十六进制零作为字母'O'。那 给你0xC0FFEE或0x00C0FFEE 指定所有32位。 OO COFFEE?目的 面向当然...... :-)
-
我最初看到0xCAFEBABE是一种魔力 NeXTSTEP使用的号码。 NX用“胖子 二进制文件“,基本上是 不同平台的二进制文件卡住了 一起在一个可执行文件中。如果 你是在NX英特尔上运行的 运行Intel二进制文件;如果在HP上,它 会运行HP二进制文件。 0xCAFEBABE 是区分的神奇数字 无论是英特尔还是摩托罗拉 二进制文件(不记得哪个)。
对于二进制文件来说,在开始时使用某种固定标识符是相当常见的做法(例如,zip文件以字符PK开头)。这减少了意外尝试将错误类型的文件解释为类文件的可能性。