为什么我们需要在.class文件的开头有一个幻数?
我在这里阅读了几篇关于每个java.class文件开头的幻数的帖子,并想知道为什么需要它 - 这个标记的目的是什么?
是否仍需要它?还是现在只是为了向后兼容?0xCAFEBABE
找不到回答这个问题的帖子 - 我也在java规范中看到答案
我在这里阅读了几篇关于每个java.class文件开头的幻数的帖子,并想知道为什么需要它 - 这个标记的目的是什么?
是否仍需要它?还是现在只是为了向后兼容?0xCAFEBABE
找不到回答这个问题的帖子 - 我也在java规范中看到答案
请参见: http://www.artima.com/insidejvm/whyCAFEBABE.html
编辑:和 http://radio-weblogs.com/0100490/2003/01/28.html
一些答案:
好吧,他们可能不得不选择一些东西作为他们的幻数来识别类文件,并且仅使用字母A-F可以想出多少与Java或咖啡相关的单词是有限制的:-)
-
至于为什么魔术数字3405691582(0xCAFEBABE),我的猜测是(a)32位魔术数字更容易处理,更有可能是唯一的,(b)Java团队想要一些带有Java-coffee隐喻的东西,并且由于十六进制中没有“J”或“V”,因此选择了带有CAFE的东西。我猜他们认为“CAFE BABE”比“A FAB CAFE”或“CAFE FACE”更性感,而且绝对不喜欢“CAFE A FAD”(或者更糟糕的是,“A BAD CAFE”)的含义。
-
不知道为什么我之前错过了这个,但是如果你选择将十六进制零读作字母“O”,他们本可以使用12648430的数字。这为您提供了指定所有 32 位的0xC0FFEE或0x00C0FFEE。哎呀咖啡?面向对象,当然... :-)
-
我最初将0xCAFEBABE视为NeXTSTEP使用的幻数。NX使用“胖二进制文件”,它们基本上是不同平台的二进制文件,粘在一个可执行文件中。如果您在NX英特尔上运行,它将运行英特尔二进制文件;如果在HP上,它将运行HP二进制文件。0xCAFEBABE是区分英特尔或摩托罗拉二进制文件的神奇数字(不记得是哪个)。