当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:13:00  来源:本站整理

<b>用BCEL筹划字节码 - 直接在办法的调用处增添办法</b>[Java编程]

赞助商链接



  本文“<b>用BCEL筹划字节码 - 直接在办法的调用处增添办法</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

这个最接近之前提出的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,跳转语句,自己根本就不会若何写添哪些指令,这种写近似汇编指令老是很麻烦的.

先要把加的代码自己在某个类中事前用办法写好,实例办法也好,静态办法也好,办法带有参数大概有返回值,

这些参数和返回值供调用办法中的部分变量来替换和利用.

再要增添代码的办法的前后调用这些已经写好的办法的字节码的指令序列生成InstructionList,然后再增添到利用这个办法的指令序列中

以下

public class ToolUtil {

     public static long printStart() {
         System.out.println("start start start start");
         long start = System.currentTimeMillis();
         return start;
     }

     public static void printEnd(String methodname,long start){

         System.out.println("Call to "+methodname+" took " +
                 (System.currentTimeMillis()-start) + " ms.");
         System.out.println("end end end end end end");
     }
}


  以上是“<b>用BCEL筹划字节码 - 直接在办法的调用处增添办法</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .