<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-8  評(píng)論-67  文章-0  trackbacks-0
     1package bytecodeResearch;
     2
     3import java.io.BufferedInputStream;
     4import java.io.BufferedWriter;
     5import java.io.FileInputStream;
     6import java.io.FileWriter;
     7import java.io.IOException;
     8
     9public class ReadAndWriteClass {
    10    
    11    //16進(jìn)制數(shù)字字符集 
    12    private static String hexString = "0123456789ABCDEF"
    13
    14    /**
    15     * 將字節(jié)數(shù)組的指定長(zhǎng)度部分編碼成16進(jìn)制數(shù)字字符串
    16     * @param buffer 待編碼的字節(jié)數(shù)組
    17     * @param length 指定的長(zhǎng)度
    18     * @return 編碼后連接而成的字符串
    19     */

    20    public static String encode(byte[] buffer,int length) 
    21    {     
    22        StringBuilder sbr = new StringBuilder();
    23        //將字節(jié)數(shù)組中每個(gè)字節(jié)拆解成2位16進(jìn)制整數(shù) 
    24        for(int i=0;i<length;i++
    25        
    26            sbr.append(hexString.charAt((buffer[i]&0xf0)>>4)); 
    27            sbr.append(hexString.charAt(buffer[i]&0x0f)); 
    28            sbr.append("  ");
    29        }
     
    30        return sbr.toString(); 
    31    }
     
    32    
    33    /**
    34     * 讀取一個(gè)Class文件,將其所有字節(jié)轉(zhuǎn)換為16進(jìn)制整數(shù),并以字符形式輸出
    35     * @param inputPath  輸入文件的完整路徑
    36     * @param outputPath 輸出文件的完整路徑
    37     * @throws IOException 讀寫過程中可能拋出的異常
    38     */

    39    public static void rwclass(String inputPath, String outputPath) throws IOException
    40    {
    41        //讀取Class文件要用字節(jié)輸入流
    42        BufferedInputStream bis = new BufferedInputStream(
    43                new FileInputStream(inputPath));
    44        //輸出轉(zhuǎn)換后的文件要用字符輸出流
    45        BufferedWriter bw = new BufferedWriter(
    46                new FileWriter(outputPath));
    47        
    48        int readSize = 16;
    49        byte[] buffer_read = new byte[readSize];
    50        String line;
    51        String lineNumber = "0000000";
    52        String strReplace;
    53        int i = 0;
    54        while ((readSize = bis.read(buffer_read,0,readSize))!= -1)
    55        {
    56            line = encode(buffer_read,readSize);
    57            strReplace = Integer.toHexString(i);
    58            lineNumber = lineNumber.substring(07-strReplace.length());
    59            lineNumber = lineNumber+strReplace;
    60            line = lineNumber+"0h: "+line;
    61            bw.write(line);
    62            bw.newLine();
    63            i++;
    64        }

    65        bis.close();
    66        bw.close();
    67    }

    68
    69    /**
    70     * 程序的入口方法
    71     * @param args
    72     * @throws IOException
    73     */

    74    public static void main(String[] args)
    75    {
    76        //指定輸入、輸出文件的完整路徑
    77        String inputPath = "L:/HelloWorld/HelloWorld.class";
    78        String outputPath = "L:/HelloWorld/HelloWorld_ByteCode.txt";
    79        
    80        try {
    81            rwclass(inputPath, outputPath);    
    82            System.out.println("Successfully !");
    83        }
     catch (IOException ioe) {
    84            System.err.println("Something wrong with reading or writing !");
    85            ioe.printStackTrace();            
    86        }
        
    87        
    88    }

    89
    90}

    91
    posted on 2008-02-01 04:11 獨(dú)孤求敗 閱讀(4576) 評(píng)論(5)  編輯  收藏 所屬分類: Java ByteCode

    評(píng)論:
    # re: 一個(gè)讀取Class文件的示例程序 2008-02-01 09:16 | astamei
    這個(gè)就是一個(gè)讀二進(jìn)制文件吧?  回復(fù)  更多評(píng)論
      
    # re: 一個(gè)讀取Class文件的示例程序 2008-02-01 12:27 | 獨(dú)孤求敗
    @astamei
    是啊,實(shí)際上就是將一個(gè)二進(jìn)制文件轉(zhuǎn)換為十六進(jìn)制文件
      回復(fù)  更多評(píng)論
      
    # re: 一個(gè)讀取Class文件的示例程序 2008-02-17 12:46 | 93ttu
    好東西呀  回復(fù)  更多評(píng)論
      
    # re: 一個(gè)讀取Class文件的示例程序 2008-03-25 16:53 | 王躍峰
    不知道博主還在寫嗎?我研究了下,寫了程序要獲取到class中的method的參數(shù)名稱,目前只能得到方法描述.
    一般是這樣的
    create(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    我現(xiàn)在想知道參數(shù)的名字啊,常量池中有這個(gè)名字的
    怎樣通過method_info聯(lián)系到哪個(gè)參數(shù)名稱?
    求老大賜教.mail:wang.yue.feng@163.com  回復(fù)  更多評(píng)論
      
    # re: 一個(gè)讀取Class文件的示例程序 2010-02-16 06:04 | doon

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 色婷婷六月亚洲综合香蕉| 成人免费在线看片| 亚洲第一综合天堂另类专| 亚洲AV日韩AV永久无码免下载| 全部免费a级毛片| 最新中文字幕电影免费观看| 日韩精品无码免费一区二区三区| 人妻18毛片a级毛片免费看| 亚洲熟妇无码AV不卡在线播放 | 亚洲中文字幕一区精品自拍| 亚洲尹人九九大色香蕉网站| 亚洲午夜久久久影院伊人| 成人亚洲综合天堂| 精品国产免费观看一区| 久久国内免费视频| 91网站免费观看| 99热在线免费播放| 免费的全黄一级录像带| 久久久久久噜噜精品免费直播| 黄色a级片免费看| 国产精品亚洲小说专区| 亚洲国产精华液2020| 国产精品亚洲午夜一区二区三区| 亚洲精品第一国产综合精品| 久久久久亚洲精品影视| 亚洲国产精品VA在线看黑人| 亚洲中文字幕无码久久综合网| 久久久无码精品亚洲日韩软件| 亚洲七七久久精品中文国产| 又粗又硬免费毛片| 国产啪亚洲国产精品无码| 亚洲美女高清一区二区三区 | igao激情在线视频免费| 理论片在线观看免费| 美女羞羞免费视频网站| 看一级毛片免费观看视频| 色屁屁在线观看视频免费| 日日躁狠狠躁狠狠爱免费视频| 丰满妇女做a级毛片免费观看| 一本大道一卡二大卡三卡免费| 波霸在线精品视频免费观看|