Java中class文件的前四个字节为什么是 CAFEBABE? 是谁定义的?

Java编程语言之父,詹姆斯•高斯林(James Gosling),曾这样说过:

关于这一点,我很抱歉。我以前并不知道有 NeXT connection。这些有趣的十六进制数(HEX words)可能是匹配的来源. 至于在Java中使用CAFEBABE作为魔数的过程, 说起来有些曲折:

我和小伙伴们经常去一个叫圣米歇尔巷(St Michael’s Alley)的地方吃午餐。根据当地传说, 在深暗的过去,感恩而死乐队(Grateful Dead)在出名前曾在此地表演. 这绝对是一个因 Grateful Dead Kinda Place 而闻名的地方。杰瑞(Jerry)去世时, 他们进行了祭奠.我们经常去那里, 称这个地方为 死亡咖啡(Cafe Dead)。

可以看到,这是一个十六进制数. 那时候我正好需要维护一些文件的编码格式,需要用到两个魔数(magic numbers): 一个用于对象持久化文件, 另一个用于类文件. 于是我就用 CAFEDEAD 作为对象持久化文件的魔数, 当然,这两个魔数有着共同的前缀: 4个十六进制字符(CAFE, Java和咖啡有一段深沉的虐恋), 我选中了BABE(宝贝),于是不知道为什么洪荒之力就爆发了[鬼知道我都经历了些什么,>2016年8月17日<]。

当时, 这个魔数并没有什么特别的意义, 也看不出来有什么重要的, 或许很快就会消失在历史中。所以 CAFEBABE 成为 class 文件的魔数, CAFEDEAD 成为持久对象的魔数. 但没多久持久化对象(persistent object)技术真的消失了, 就如同魔数 CAFEDEAD 所蕴含的一样 —— 后来用的是RMI技术。

另请参见:

WIKI百科: Java_class_file

  • 深入Java虚拟机之二:Class类文件结构

翻译人员: 铁锚 http://blog.csdn.net/renfufei

class文件魔数CAFEBABE的由来相关推荐

  1. java的class文件魔数和版本对应关系

    使用十六进制编辑器打开class查看,CAFEBABE为class文件魔数,后面4个字节是版本号 也可以使用javap  -verbose yourclass.class查看major version

  2. 常见文件魔数(幻数)总结

    文件类型 文件头 文件尾 JPG FF D8 FF E0 FFD9 GIF 47 49 46 38 PSD 38 42 50 53 PNG 89 50 4E 47 AE 42 60 82 GIF 47 ...

  3. Java 对上传文件进行魔数校验

    魔数这个词在不同领域代表不同的含义.在计算机领域,魔数有两个含义,一指用来判断文件类型的魔数(magic number):二指程序代码中的魔数,也称魔法值. 不是所有文件都有文件头的.一个.txt类型 ...

  4. Java 通过魔数判断上传文件的类型

    通过魔数值来校验文件类型主要是防止恶意修改等操作. 使用魔数值校验,不管是传入的文件有后缀名,还是无后缀名,或者修改了后缀名,真正获取到的才是该文件的实际类型,这样避免了一些想通过修改后缀名或者Con ...

  5. JVM虚拟机-Class文件之魔数

    一.魔数之定义 魔数这个词在不同领域代表不同的含义.在计算机领域,魔数有两个含义,一指用来判断文件类型的魔数:二指程序代码中的魔数,也称魔法值. 大多数情况下,我们都是通过扩展名来识别一个文件的类型的 ...

  6. 14.VisualVM使用详解、15.VisualVM堆查看器使用的内存不足、19.class文件--文件结构--魔数、20.文件结构--常量池、21.文件结构访问标志(2个字节)、22.类加载机制概

    14.VisualVM使用详解 15.VisualVM堆查看器使用的内存不足 16.性能调优概述 17.性能调优–案例1 18.性能调优-案例三 19.class文件–文件结构–魔数 20.文件结构– ...

  7. 深入理解Java虚拟机——魔数与Class文件的版本

    目录 一.魔数 1.1.魔数的概述 1.2.魔数的作用 1.3.版本号 二.通过Binary Viewer工具查看编译后的Class文件 2.1.Binary Viewer工具的下载与安装 2.2.B ...

  8. 文件类型识别----魔数

    魔数简介: 在识别文件类型时,我们很多人都是通过文件的后缀来识别的,如苍老师.mp4, 波老师.avi, 玛利亚.jpg. 使用后缀名识别文件类型不是特别准确,尤其是后缀民可以手动修改的情况下. 另外 ...

  9. Java 中文件之魔数

    Java 中令人匪夷所思的 Magic 之魔数 先来讲讲一个故事,公司突然有一个需求,客户提交的文件,让你获取到他提交的文件到底是一个什么文件,这个不是小事一桩吗?直接上代码. public stat ...

最新文章

  1. 我在学python-我在大学毕业后学习Linux、python的一些经验
  2. 往ABAP gateway system上和Cloud Foundry上部署HTML5应用
  3. Java动态代理全面分析
  4. nokia n1 android 6,诺基亚推Nokia N1拥抱安卓,微软该怎么想?
  5. 使用Beautifulsoup去除特定标签
  6. python 中的 __name__
  7. CentOS7.3安装Nginx
  8. 搭建SSM全流程框架过程
  9. bootstrap带图标的按钮与图标做连接
  10. EyouCms1.0前台GetShell漏洞复现
  11. Leaf-美团分布式ID生成服务
  12. C++ MFC 学习笔记+小型通讯录系统实现
  13. NuGet命令的用法
  14. 解决pytest运行时报错ModuleNotFoundError
  15. c语言nba球星信息系统,NBA:超神控卫
  16. android 网络代码是什么意思,Android判断网络状态的代码
  17. 内是不是半包围结构_半包围结构(软笔)
  18. 满足一个小妹妹的需求——给她批量抓取动漫图片
  19. 条码打印机---关于碳带的选择
  20. 优思学院|建立六西格玛管理模式的七部曲

热门文章

  1. java--两个巨大素数(质数)的乘积
  2. 完善三维全栈产品布局 的卢深视用三维全栈技术点亮2020全球智博会
  3. MySQL 数据库之 MMM 高可用架构构建
  4. iOS第三方插件——Masonry详解
  5. 大疆机甲大师Python开发: 两只老虎
  6. 国际布线标准电缆色谱
  7. 【Linux】Protected multilib versions XXX错误
  8. SMTP-POP3协议简介以及使用Telnet客户端收/发邮件(163邮箱)
  9. 计算机管理器磁盘清理,Win10提示windows磁盘空间清理管理器已停止工作
  10. java info是什么_什么是package-info.java