Class文件结构应用-根据class文件获取class内容

来源:互联网 发布:dump linux进程内存 编辑:程序博客网 时间:2024/05/14 03:26

有时候我们需要根据class文件获取class的内部信息,比如class的完整类名,方法等。注意啊,反射此处貌似行不通,因为只有class文件,不知道类名的。。。

但,我们知道class文件是有规范的,既然有规范,那肯定可以通过规范获取其内部信息。

下面就是class文件结构及class常量池数据数据类型图:

Class文件结构:

class文件结构

Class常量池数据数据类型:


根据Class文件结构及数据类型,我们可以通过以下代码获取类文件内部信息:

/** * 根据class文件获取该类文件中的类名  */@SuppressWarnings("resource")public static String getFullyQualifiedName(File file) throws IOException {//class文件int MAGIC = 0xCAFEBABE;String name = null;try {DataInputStream in = new DataInputStream(new FileInputStream(file));if(in.readInt() != MAGIC) {// 不是一个.class文件throw new IOException("Not a class file");}in.readUnsignedShort();// 次版本号in.readUnsignedShort();// 主版本号in.readUnsignedShort();// 长度in.readByte();// CLASS=7in.readUnsignedShort();// 忽略这个地方in.readByte();// UTF8=E1name =in.readUTF();//类的名字!!!in.close();} catch(IOException ioe) {ioe.printStackTrace();}return name;}


原创粉丝点击