技术开发 频道

一个读取Class文件的示例程序

  【IT168 技术文档】一个读取Class文件的示例程序

  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}   91
0
相关文章