快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

和记娱乐博娱188下载:从.class文件中寻找类名



作者: BUILDER.COM

Wednesday, J和记娱乐博娱188下载anuary 22 2003 11:18 AM

设想这样一个情形:用户经由过程GUI或者在敕令行选择一个clas和记娱乐博娱188下载s文件,然则他(或她)没有能够供给完全有效的类名。

例如,对付C:codehackse和记娱乐博娱188下载searchcomgenerationjavaHack.class,精确的类名是com.generationjava.Hack。

可以有多种要领判断类的名字:

假定所有的类都以com,org,或者net开首

搜索classpath来探求名字为Hack的类

搜索classpath来探求映射到这个文件的目录进口

直接查看类自身。对付所有的环境下,这是最直接的

Java规范规定了若何查看一个class文件。存储在class文件一开始的一个值便因此Java内部瓜分符“/”为款式的完备的类明。和记娱乐博娱188下载

下面的代码返回了文件C:codehacksesearchcomgenerationjavaHack.class的内部类名com/generationjava/Hack,读者可以进一步编写代码将“/”转换成“.”:

static final public int MAGIC = 0xCAFEBABE;

// 通报C:codehacksesearchcomgenerationjavaHack.class

// 假定存在这样一个类

public String getFullyQualifiedName(String filename) throws IOException {

String name = null;

try {

DataInputStream in = new

DataInputStream(new FileInputStream(filename));

if(in.readInt() != MAGIC) {

// 不是一个.class文件

thrownew IOException("Not a class file");

}

in.readUnsignedShort();// 次版本号

in.readUnsignedShort();// 主版本号

in.readUnsignedShort();// 长度

in.readByte();// CLASS=7

in.readUnsignedShort();// 轻忽这个地方

in.readByte();// UTF8=1

name =in.readUTF();//类的名字!!!

in.close();

} catch(IOException ioe) {

ioe.printStackTrace();

}

return name;

}

当你直接从.class文件中得到类的信息的时刻,就简化了开拓。查找一个匿名.class类文件的完备的类名是任何基于.class文件事情的利用的紧张部件和记娱乐博娱188下载。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: