`
z610
  • 浏览: 39226 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

判断编译的class文件JDK版本号

    博客分类:
  • java
阅读更多

	public static void main(String[] args) {	
		try {
			String filename = "/home/xxx/apps/eclipse/workspace/Test/bin/com/ibm/plugin/test/MyChecker.class";
			DataInputStream in = new DataInputStream(new FileInputStream(filename));
			int magic = in.readInt();
			if (magic != 0xcafebabe) {
				System.out.println(filename + "is not a valid class!");
			}
			int minor = in.readUnsignedShort();
			int major = in.readUnsignedShort();
			System.out.println(filename + ":" + major + "." + minor);
			in.close();
		} catch (IOException e) {
			e.printStackTrace();
		}

String version = null;
		DataInputStream in = null;
		try {
			tring filename = "/home/zhujt/apps/eclipse/workspace/Test/bin/com/ibm/plugin/test/MyChecker.class";
			 in = new DataInputStream(new FileInputStream(filename));
			
			int magic = in.readInt();
			if (magic != 0xcafebabe) {
				throw new IllegalArgumentException("Wrong file format.");
			}
			
			int minor = in.readUnsignedShort();
			int major = in.readUnsignedShort();
			
			/*
			major    minor       version
			45       3           1.0
			45       3           1.1
			46       0           1.2
			47       0           1.3
			48       0           1.4
			49       0           1.5
			50       0           1.6
			*/

			if(major == 45 && minor == 3) {
				version = "1.1";
			} else if(major == 46) {
				version = "1.2";
			} else if(major == 47) {
				version = "1.3";
			} else if(major == 48) {
				version = "1.4";
			} else if(major == 49) {
				version = "1.5";
			} else if(major == 50) {
				version = "1.6";
			} 
			// Just for future use, it is not correct
			else if(major > 50) {
				version = "1.7";
			}
		} finally {
			if(in != null) {
				try {
					in.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		
		return version;
}
 
分享到:
评论

相关推荐

    java 类反编译工具支持JDK1.8

    标题提到的是一个针对 JDK 1.8 版本的 Java 反编译工具,这表明该工具兼容 Java 8 的字节码,能够在不拥有源代码的情况下查看和理解类文件的实现细节。描述中提到了作者在寻找可用的工具过程中遇到困难,最终找到并...

    jdk双版本.zip

    首先,我们来看第一个子文件“jdk-8u202-windows-x64.exe”,这是针对Windows 64位系统的JDK安装程序。JDK 8u202是Java 8的更新版本,"u202"代表该版本的具体更新号,意味着它是第八个主要版本的第202次更新。对于...

    ubuntu的JDK1.6.0_37

    安装JDK1.6.0_37在Ubuntu上的步骤通常是这样的: 1. **下载**:从Oracle官网或者第三方镜像站点获取`jdk-6u37-linux-i586.bin`文件,这是JDK的二进制安装包。 2. **赋予执行权限**:使用命令`chmod +x jdk-6u37-...

    java 反编译文件

    通常,JDK的安装路径可能是`C:\Program Files\Java\jdk版本号\bin`(Windows)或者`/usr/lib/jvm/java-版本号-openjdk-amd64/bin`(Linux或MacOS)。 接下来,为了在Eclipse中集成JAD,你需要下载并安装`...

    class文件结构(简单class文件)

    紧随魔术数之后,是两个字节的版本信息,分别表示主版本号和次版本号,主版本号表示class文件可以被执行的JVM版本,次版本号表示class文件的兼容性。class文件中的版本信息告诉JVM运行class文件的Java环境版本。 接...

    安卓反编译dex文件格式实例分析

    确保替换路径中的版本号以匹配实际安装的build-tools版本。 ##### 使用ADB运行测试 一旦生成了`Hello.dex`文件,就可以通过ADB将其推送到设备上并执行。步骤如下: 1. 使用`adb root`获取root权限。 2. 将`Hello....

    classVersionViewer

    另外,jar-or-class-version.jar是该工具的主要执行文件,它是一个Java可执行jar包,利用Java的反射和类加载机制,读取并解析class文件的魔数和主版本号,从而获取编译时的JDK版本信息。最后,readme.txt文件通常...

    Java开发环境JDK文件

    这个版本号1.8代表的是Java 8,这是一个非常重要的Java版本,引入了许多新特性,如Lambda表达式、Stream API和方法引用来增强代码的简洁性和可读性。 JDK的核心组件包括: 1. **Java编译器**(javac):负责将源...

    class文件解析

    2. 文件版本:接着是两个2字节的次版本号和主版本号,用于标识Class文件的版本,与JVM的版本对应,确保兼容性。 3. 表结构:表是Class文件的核心,包括常量池表、访问标志表、类索引、父类索引、接口索引集合、字段...

    jdk反编译工具及其使用方法

    例如,在Windows上可能是`C:\Program Files\Java\jdk版本号\bin`,在macOS或Linux上可能是`/Library/Java/JavaVirtualMachines/jdk版本号.jdk/Contents/Home/bin`。 3. 使用JAD反编译:在命令行中,输入以下命令来...

    java反编译工具及eclipse插件

     3、将jad反编译工具jad.exe放到jdk安装路径的bin目录下面,jadclipse_3.1.0.jar放到eclipse的安装目录下的plugins目录下。  4、启动eclipse,打开:Window->Preferences->Java->JadClipse.  Path to ...

    JDKwindows22版本

    Java 编译器(javac):用于将 Java 源代码编译成 Java 字节码,也就是 .class 文件。 Java 虚拟机(JVM):负责解释执行 Java 字节码,并将其转换为特定硬件平台的机器码。 Java 运行时环境(JRE):包含 Java ...

    tomcat:bad version number in class file的解决方法

    当我们编译 Java 代码时,编译器会生成 class 文件,而 class 文件的版本号是根据编译时使用的 JDK 版本确定的。如果我们使用的 JDK 版本高于 Tomcat 运行时使用的 JDK 版本,那么 Tomcat 就会报告 "bad version ...

    class反编译需要的工具和jar包

    当我们提到"Class反编译"时,通常指的是将Java的.class文件转换回可读的源代码形式。下面我们将详细探讨这个过程所需的工具和jar包。 首先,我们要介绍的是JAD(Java Decompiler)。JAD是一款非常流行的开源Java反...

    java_jdk-8u161-windows-x64(jdk官方版本1.8)

    1. **Java编译器** (javac): 它将源代码(.java文件)转换为Java字节码(.class文件),这是Java平台可执行的二进制形式。字节码可以在任何支持Java的平台上运行,因为JVM会解释并执行它。 2. **Java解释器** (java...

    ubuntu18.04安装jdk1.8.zip

    以下是一个详细的步骤指南,帮助您在Ubuntu 18.04上成功安装JDK 1.8。 首先,我们需要更新系统软件包列表,确保我们有最新的可用版本: ```shell sudo apt update ``` 由于Ubuntu 18.04默认仓库中的JDK版本可能不是...

    jdk1.6解压版本

    2. **Java解释器**(java):执行编译后的.class文件,使Java程序得以运行。 3. **Java虚拟机(JVM)**:JVM是Java平台的核心,负责执行字节码并提供运行时环境。 4. **Java运行库**:包含大量的类库,如基础的...

    Bad version number in .class file 错误

    "Bad version number in .class file" 是一个在Java编程中常见的错误,通常出现在尝试运行或编译不兼容的.class文件时。这个错误意味着.class文件(Java字节码)的版本与正在执行它的JVM(Java虚拟机)版本不匹配。...

    Java开发的第一步——安装JDK

    安装JDK之后,你可以通过`javac`命令来编译Java源代码(.java文件),生成字节码(.class文件)。例如,`javac HelloWorld.java`会将HelloWorld.java文件编译成HelloWorld.class。然后使用`java`命令运行程序,如`...

Global site tag (gtag.js) - Google Analytics