获取class文件的编译级别

来源:互联网 发布:java全局变量怎么定义 编辑:程序博客网 时间:2024/06/05 15:01

概念:

1、魔数(magic)
          用于标识文件是否为class文件,由4个字节构成,必须为:0xCAFEBABE
2、版本号(version)
          4个字节,前两个字节为次版本号,后两个字节为主版本号,且都是高位在前,低位在后。
          
      class文件的前8个字节为:magic+minor_version+major_version, 以16进制表示,两位构成一个字节。

具体代码:
private static final String filePath = "e:/Test.class";public static void main(String args[]) {try {// 读取class文件,filePath为文件路径FileInputStream fis = new FileInputStream(filePath);int length = fis.available();byte[] data = new byte[length];// 读取文件到字节数组fis.read(data);// 关闭文件fis.close();// 解析文件数据parseFile(data);} catch (Exception e) {System.out.println(e);}}private static void parseFile(byte[] data) {// 输出魔数System.out.println("参考值:");System.out.println("魔数:0xCAFEBABE");System.out.println("版本号:49.0=5.0,50.0=6.0,46.0=1.4,45.3=1.3");System.out.println("该文件信息:");System.out.print("魔数:0x");System.out.print(Integer.toHexString(data[0]).substring(6).toUpperCase()+ Integer.toHexString(data[1]).substring(6).toUpperCase()+ Integer.toHexString(data[2]).substring(6).toUpperCase()+ Integer.toHexString(data[3]).substring(6).toUpperCase());// 次版本号int minor_version = (((int) data[4]) << 8) + data[5];// 主版本号int major_version = (((int) data[6]) << 8) + data[7];System.out.println("版本号:" + major_version + "." + minor_version);}/** * Integer范围(长度为32位):-2^31——(2^31-1); 负数,计算机存储补码,绝对值的2进制,取反,加1 *  */


原创粉丝点击