Class 文件结构
定义
- Java虚拟机只与特定的二进制文件格式class文件有关联
- 还有其他语言也能够编译出class文件
- class文件包含了Java虚拟机的指令集,符号表以及若干辅助信息
与类的关系
- 每一个class文件都对应一个类或一个接口,但类和接口并不都定义在文件里
文件格式
- 每个class文件都由字节流组成,每个字节含有8个二进制位。
- 多字节数据项总是按照Big-endian(大端在前)的顺序进行存储。
- Big-endian(大端在前):数据的低位保存在内存的高地址中,而数据的高位保存在数据的低地址中。
- Little-endian(小端在前):数据的低位保存在内存的低地址中,而数据的高位保存在数据的高地址中。
- Class文件可以使用java.io.Datainput等接口进行IO流读取。
数据结构
无符号数
- 类似于C语言的结构体的伪结构来存储数据,这种结构由两种数据类型,无符号数和表
- 无符号数是指一组专用的数据类型来表示class文件的内容
- 无符号数可以用来描述数据,索引引用,数量值
- 每个无符号数严格按照顺序连续存放
表
- 表用于描述有结构关系的复合结构数据
- 表是由多个无符号数或者其他表作为数据项构成的复合数据类型
- 表的命名习惯性以_info结尾
- 整个class文件也可以视为一张表
魔数
- 文件起始用固定内容来描述该文件内容,固定内容即为魔数
由四个字节组成CA FE BA BE - 对象持久化文件CAFEDEAD
- 利用
- 判断文件真实内容
- 判断上传文件的真实类型
版本号
- U2 major-version最高版本号(主版本号)
- U2 minor-version最低版本号(次版本号)
- 高版本可以执行低版本class文件