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

有时候我们需要根据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=7
			in.readUnsignedShort();// 忽略这个地方
			in.readByte();// UTF8=E1
			name =in.readUTF();//类的名字!!!
			in.close();
		} catch(IOException ioe) {
			ioe.printStackTrace();
		}
		return name;
	}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值