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进制数字字符集
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
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(0, 7-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}
<!--EndFragment-->