我使用ASM字节码阅读器来解析代码中存在的.class文件。 但是我想获得在类中定义的特定字符串,其中将在xml中提及。
那么如何使用XML并解析.class中的字符串。正如我所看到的那样,ClassReader只将.class作为参数而不是XML或任何其他格式。
我正在使用这样的东西:
InputStream in=String.class.getResourceAsStream("/java/lang/String.class");
ClassReader classReader=new ClassReader(in);
classReader.accept(v, 0);
请告诉我有没有办法根据xml文件中定义的规则解析.class?
提前致谢...
衙署
答案 0 :(得分:1)
据我了解,您希望执行以下操作:您正在接收 .class 文件,然后您想从中提取XML文件中指定的某种信息。如果是这样的话:ASM不需要知道您需要什么样的信息。 ASM将清楚地读取类文件。如果你明白想知道某个特定的String
是否是类的常量池的一部分,你可以使用捷径来获得通知:覆盖ClassReader
的{{1}}方法,如这样:
readUTF8(int, char[])
当然,您必须提供一些知道您感兴趣的public MyClassReader extends ClassReader {
private final Set<String> constantPoolStrings = new HashSet<String>();
// Add constructors here
@Override
public String readUTF8(int index, char[] buf) {
String value = super.readUTF8(index, buf);
constantPoolStrings.add(value);
return value;
}
public boolean hasString(String value) {
// From the details in your comment, we will need to do a fuzzy search.
for(String poolString : constantPoolStrings) {
if(poolString.contains(value)) {
return true;
}
}
return false;
}
}
的逻辑:例如,如果您有一个包含特定单词的XML文件,则需要解析此文件并提取这些单词。您可以查询这些String
的{{1}}。