读取class文件例子

上一篇 / 下一篇  2011-06-21 13:58:54 / 个人分类:Class 解析

package 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进制数字字符集 
12    private static String hexString = "0123456789ABCDEF"
13
14    /**
15     * 将字节数组的指定长度部分编码成16进制数字字符串
16     * @param buffer 待编码的字节数组
17     * @param length 指定的长度
18     * @return 编码后连接而成的字符串
19     */

20    public static String encode(byte[] buffer,int length) 
21    {     
22        StringBuilder sbr = new StringBuilder();
23        //将字节数组中每个字节拆解成2位16进制整数 
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     * 读取一个Class文件,将其所有字节转换为16进制整数,并以字符形式输出
35     * @param inputPath  输入文件的完整路径
36     * @param outputPath 输出文件的完整路径
37     * @throws IOException 读写过程中可能抛出的异常
38     */

39    public static void rwclass(String inputPath, String outputPath) throws IOException
40    {
41        //读取Class文件要用字节输入流
42        BufferedInputStream bis = new BufferedInputStream(
43                new FileInputStream(inputPath));
44        //输出转换后的文件要用字符输出流
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

TAG:

 

评分:0

我来说两句

Open Toolbar