JavaVerParser.java

通过读取解析class文件中的Java魔数(Magic Number),判断编译该class的Java编译器是哪个版本的。

 

import java.io.FileInputStream;

/**
 * 解析class文件格式
 */
public class JavaVerParser {
  public static void main(String args[]) {
    String sourFName = "./Test01.class";
    if (args.length >= 1) {
      sourFName = args[0];
    }
    // System.out.println("sourFname is: "+ sourFName);

    try {
      // 读取文件数据,文件是当前目录下的First.class
      FileInputStream fis = new FileInputStream(sourFName);
      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.print("/u9b54/u6570(magic number) is: 0x"); // 魔数
    System.out.print(Integer.toHexString(data[0]).substring(6).toUpperCase());
    System.out.print(Integer.toHexString(data[1]).substring(6).toUpperCase());
    System.out.print(Integer.toHexString(data[2]).substring(6).toUpperCase());
    System.out.println(Integer.toHexString(data[3]).substring(6).toUpperCase());
    // 主版本号和次版本号码
    int minor_version = ((data[4]) << 8) + data[5];
    int major_version = ((data[6]) << 8) + data[7];
    System.out.println("/u7248/u672c/u53f7(version number) is: "
        + major_version + "." + minor_version); // 版本号

    System.out.println("major.minor version 51.0 is for JDK / JRE7.0)");
    System.out.println("major.minor version 50.0 is for JDK1.6(JRE1.6)");
    System.out.println("major.minor version 49.0 is for JDK1.5(JRE1.5)");
    System.out.println("major.minor version 48.0 is for JDK1.4(JRE1.4)");
  }
}



javac编译选项——

javac -source 1.4 -target 1.5 <SourceCode.java>

-source 选项, 指定源码版本.
-target 选项, 指定目标class版本.
如果已经指定了source版本, 那target版本不能低于source.
target选项也是一个对javac来说很灵活的设置.

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值