一个合法的class文件以固定的0xCAFEBABE格式开始,所以需要先读取4个字节,判断文件二进制格式是否是合法。

    1. u4 magic;
    2. u2 minor_version;
    3. u2 major_version;

    魔数和版本号解析代码片段:

    1. // u4 magic;
    2. int magic = dis.readInt();
    3. // 校验文件魔数
    4. if (0xCAFEBABE == magic) {
    5. this.magic = magic;
    6. // u2 minor_version
    7. this.minor = dis.readUnsignedShort();
    8. // u2 major_version;
    9. this.major = dis.readUnsignedShort();
    10. }

    解析结果:

    1. {
    2. "magic": -889275714,
    3. "minor": 0,
    4. "major": 51
    5. }

    其中"major": 51对应的JDK版本是JDK1.7。