一个合法的class文件以固定的0xCAFEBABE
格式开始,所以需要先读取4个字节,判断文件二进制格式是否是合法。
u4 magic;
u2 minor_version;
u2 major_version;
魔数和版本号解析代码片段:
// u4 magic;
int magic = dis.readInt();
// 校验文件魔数
if (0xCAFEBABE == magic) {
this.magic = magic;
// u2 minor_version
this.minor = dis.readUnsignedShort();
// u2 major_version;
this.major = dis.readUnsignedShort();
}
解析结果:
{
"magic": -889275714,
"minor": 0,
"major": 51
}
其中"major": 51
对应的JDK版本是JDK1.7。