java獲取版本號及字節(jié)碼編譯版本方法示例
更新時間:2017年10月16日 08:59:15 作者:蔣固金
這篇文章主要給大家介紹了關于java獲得版本號及字節(jié)碼編譯版本的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或使用java具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
前言
之所以會有這篇文章,是因為公司的開發(fā)環(huán)境比較老,尋找一些jar包的時候總是會糾結對應的編譯版本,感覺很麻煩,所以寫了一個工具類用于讀取class或jar文件的編譯版本,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。
示例代碼
package com.jinggujin.util; import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.Enumeration; import java.util.jar.JarEntry; import java.util.jar.JarFile; /** * Java 版本工具 * * @author jianggujin * */ public class JavaVersionUtils { private static final int JAVA_CLASS_MAGIC = 0xCAFEBABE; public final static int JDK_1_2 = 46; public final static int JDK_1_3 = 47; public final static int JDK_1_4 = 48; public final static int JDK_5 = 49; public final static int JDK_6 = 50; public final static int JDK_7 = 51; public final static int JDK_8 = 52; /** * 獲得當前環(huán)境JDK版本 * * @return */ public static int getJDKVersion() { String version = System.getProperty("java.version"); if (version != null && version.matches("1\\.\\d.*")) { int v = Integer.parseInt(version.charAt(2) + ""); if (v >= 2) { return 44 + v; } } return -1; } /** * 獲得class或jar編譯版本 * * @param file * @return * @throws Exception */ public static int getCompileVersion(File file) throws Exception { if (file == null || !file.isFile() || !file.getName().matches(".*\\.((jar)|(class))")) { throw new IllegalArgumentException("the file must be a jar or class."); } int version = -1; if (file.getName().endsWith("jar")) { JarFile jarFile = new JarFile(file); Enumeration<JarEntry> enumeration = jarFile.entries(); while (enumeration.hasMoreElements()) { JarEntry entry = enumeration.nextElement(); if (entry.getName().endsWith(".class")) { InputStream in = jarFile.getInputStream(entry); version = getVersion(in); in.close(); break; } } jarFile.close(); } else { InputStream in = new FileInputStream(file); version = getVersion(in); in.close(); } return version; } private static int getVersion(InputStream in) throws Exception { DataInputStream dis = new DataInputStream(in); // ,前面8個字節(jié)CA FE BA BE 是固定的,之后4個字節(jié)是次版本號,次版本號后面的4個字節(jié)是jdk的版本號 int magic = dis.readInt(); if (magic == JAVA_CLASS_MAGIC) { // int minorVersion = dis.readUnsignedShort(); int majorVersion = dis.readUnsignedShort(); // Java 1.2 >> 46 // Java 1.3 >> 47 // Java 1.4 >> 48 // Java 5 >> 49 // Java 6 >> 50 // Java 7 >> 51 // Java 8 >> 52 return majorVersion; } return -1; } }
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
您可能感興趣的文章:
- 學會Java字節(jié)碼指令,成為技術大佬
- Java之字節(jié)碼以及優(yōu)勢案例講解
- Java字節(jié)碼增強技術知識點詳解
- 詳解Java動態(tài)字節(jié)碼技術
- 詳解Java字節(jié)碼編程之非常好用的javassist
- 淺談javap命令拆解字節(jié)碼文件
- Java字節(jié)碼中jvm實例用法
- Javassist如何操作Java 字節(jié)碼
- Java中invokedynamic字節(jié)碼指令問題
- java 獲取字節(jié)碼文件的幾種方法總結
- java 中如何獲取字節(jié)碼文件的相關內容
- java字節(jié)碼框架ASM操作字節(jié)碼的方法淺析
- java字節(jié)碼框架ASM的深入學習
- Java 將字符串動態(tài)生成字節(jié)碼的實現方法
- 通過java字節(jié)碼分析學習對象初始化順序
- Java字節(jié)碼的增強技術
相關文章
Mybatis中動態(tài)SQL,if,where,foreach的使用教程詳解
MyBatis的動態(tài)SQL是基于OGNL表達式的,它可以幫助我們方便的在SQL語句中實現某些邏輯。這篇文章主要介紹了Mybatis中動態(tài)SQL,if,where,foreach的使用教程,需要的朋友可以參考下2017-11-11springcloud gateway如何實現路由和負載均衡
這篇文章主要介紹了springcloud gateway如何實現路由和負載均衡的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07