JVM虚拟机中Class文件的魔数是什么

发布时间:2021-10-23 16:05:13 作者:柒染
来源:亿速云 阅读:216

JVM虚拟机中Class文件的魔数是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

一、魔数之定义

魔数这个词在不同领域代表不同的含义。在计算机领域,魔数有两个含义,一指用来判断文件类型的魔数;二指程序代码中的魔数,也称魔法值。

很多类型的文件,其起始的几个字节的内容是固定的(或是有意填充,或是本就如此)这几个字节的内容也被称为魔数,因为根据这几个字节的内容就可以确定文件类型。有了这些魔术数字,我们就可以很方便的区别不同的文件。常见文件的魔数如下:

  1. JPEG (jpg),文件头:FFD8FF

  2. PNG (png),文件头:89504E47

  3. GIF (gif),文件头:47494638

  4. TIFF (tif),文件头:49492A00

  5. Windows Bitmap (bmp),文件头:424D

  6. CAD (dwg),文件头:41433130

  7. Adobe Photoshop (psd),文件头:38425053

  8. Rich Text Format (rtf),文件头:7B5C727466

  9. XML (xml),文件头:3C3F786D6C

  10. HTML (html),文件头:68746D6C3E

  11. Email [thorough only] (eml),文件头:44656C69766572792D646174653A

  12. Outlook Express (dbx),文件头:CFAD12FEC5FD746F

  13. Outlook (pst),文件头:2142444E

  14. MS Word/Excel (xls.or.doc),文件头:D0CF11E0

  15. MS Access (mdb),文件头:5374616E64617264204A

  16. WordPerfect (wpd),文件头:FF575043

  17. Postscript (eps.or.ps),文件头:252150532D41646F6265

  18. Adobe Acrobat (pdf),文件头:255044462D312E

  19. Quicken (qdf),文件头:AC9EBD8F

  20. Windows Password (pwl),文件头:E3828596

  21. ZIP Archive (zip),文件头:504B0304

  22. RAR Archive (rar),文件头:52617221

  23. Wave (wav),文件头:57415645

  24. AVI (avi),文件头:41564920

  25. Real Audio (ram),文件头:2E7261FD

  26. Real Media (rm),文件头:2E524D46

  27. MPEG (mpg),文件头:000001BA

  28. MPEG (mpg),文件头:000001B3

  29. Quicktime (mov),文件头:6D6F6F76

  30. Windows Media (asf),文件头:3026B2758E66CF11

  31. MIDI (mid),文件头:4D546864

二、Class文件中的魔数

为了方便虚拟机识别一个文件是否是class类型的文件,SUN公司规定每个class文件都必须以一个word(四个字节)作为开始,这个数字就是魔数。魔数是由四个字节的无符号数组成的,Java的.class文件,开头的4个字节是0xCAFEBABE。 这个魔数值在Java还被称作“ Oak”语言的时候(大约是1991年前后)就已经确定下来了。它还有一段很有趣的历史,据Java开发小组最初的关键成员Patrick Naughton 所说:“我们一直在寻找一些好玩的、容易记忆的东西,选择0xCAFEBABE是因为它象征着著名咖啡品牌Peet's Coffee深受欢迎的Baristas咖啡。”下图就是一个编译后的class文件,可以看到文件开头就是cafebabe。

JVM虚拟机中Class文件的魔数是什么

三、魔数与Class文件的版本

紧接着魔数的4个字节存储的是Class文件的版本号:第5和第6个字节是次版本号(Minor Version),第7和第8个字节是主版本号(Major Version)。

Java的版本号是从45开始的,JDK 1.1之后 的每个JDK大版本发布主版本号向上加1(JDK 1.0~1.1使用了45.0~45.3的版本号),高版本的JDK能 向下兼容以前版本的Class文件,但不能运行以后版本的Class文件,因为《Java虚拟机规范》在Class文 件校验部分明确要求了即使文件格式并未发生任何变化,虚拟机也必须拒绝执行超过其版本号的Class 文件。

例如,JDK1.1能支持版本号为45.0~45.65535的Class文件,无法执行版本号为46.0以上的Class文件,而JDK1.2则能支持45.0~46.65535的Class文件。目前最新的JDK版本为13,可生成的Class文件主版本号最大值为57.0。

上图中的版本号是34,对应的十进制为52,所以对应的JDK版本为1.8。

从JDK 1.1到13之间,主流JDK版本编译器输出的默认的和可支持的Class文件版本:

JVM虚拟机中Class文件的魔数是什么

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

推荐阅读:
  1. 如何查看java中.class文件
  2. python中class的用法是什么

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

jvm class

上一篇:Vue实现穿梭框功能的代码是什么

下一篇:java虚拟机的内存模型是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》