用 BCEL 设计字节码: 直接在方法的调用处添加方法
2009-09-23 00:00:00 来源:WEB开发网这个最接近之前提出的API转换问题
这个需要扫描源代码找到此类的方法调用处,然后在方法调用处的前后添加指令
即将代码转换成如下形式:
public class StringBuilder
{
public String buildString(int length) {
String result = "";
for (int i = 0; i < length; i++) {
result += (char)(i%26 + 'a');
}
return result;
}
public static void main(String[] argv) {
StringBuilder inst = new StringBuilder();
for (int i = 0; i < argv.length; i++) {
long start = System.currentTimeMillis();
String result = inst.buildString(Integer.parseInt(argv[i]));
System.out.println("Call to buildString$impl took " +
(System.currentTimeMillis()-start) + " ms.");
System.out.println("Constructed string of length " +
result.length());
}
}
}
转换代码如下:
先扫描这个类中的各个方法
我准备改变一下生成策略,不自己写指令了,这个自己写指令比较麻烦,但要加的代码比较多时比较容易出错,当所加的代码有if,跳转语句,自己根本就不会如何写添哪些指令,这种写类似汇编指令总是很麻烦的。
更多精彩
赞助商链接