在孤独中享受寂寞 在寂寞中厮杀黎明
One java world , One java fan !
BlogJava
首页
新随笔
联系
聚合
管理
随笔-8 评论-67 文章-0 trackbacks-0
一个读取Class文件的示例程序
1
package
bytecodeResearch;
2
3
import
java.io.BufferedInputStream;
4
import
java.io.BufferedWriter;
5
import
java.io.FileInputStream;
6
import
java.io.FileWriter;
7
import
java.io.IOException;
8
9
public
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(
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
posted on 2008-02-01 04:11
独孤求败
阅读(4562)
评论(5)
编辑
收藏
所属分类:
Java ByteCode
评论:
#
re: 一个读取Class文件的示例程序 2008-02-01 09:16 |
astamei
这个就是一个读二进制文件吧?
回复
更多评论
#
re: 一个读取Class文件的示例程序 2008-02-01 12:27 |
独孤求败
@astamei
是啊,实际上就是将一个二进制文件转换为十六进制文件
回复
更多评论
#
re: 一个读取Class文件的示例程序 2008-02-17 12:46 |
93ttu
好东西呀
回复
更多评论
#
re: 一个读取Class文件的示例程序 2008-03-25 16:53 |
王跃峰
不知道博主还在写吗?我研究了下,写了程序要获取到class中的method的参数名称,目前只能得到方法描述.
一般是这样的
create(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
我现在想知道参数的名字啊,常量池中有这个名字的
怎样通过method_info联系到哪个参数名称?
求老大赐教.mail:wang.yue.feng@163.com
回复
更多评论
#
re: 一个读取Class文件的示例程序
2010-02-16 06:04 |
doon
好!
回复
更多评论
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
相关文章:
一个解析Java Class文件的实例
Class文件格式解析
一个读取Class文件的示例程序
<
2008年2月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
1
2
3
4
5
6
7
8
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(7)
给我留言
查看公开留言
查看私人留言
随笔分类
(5)
Apache Ant 使用例程
Design Pattern
Inside JVM学习笔记
Java ByteCode(3)
Java JDK 学习笔记(2)
Java 技术
ObjectWeb ASM 操纵例程
随笔档案
(8)
2008年7月 (2)
2008年6月 (3)
2008年2月 (3)
文章分类
Java人生
笛箫情缘
搜索
积分与排名
积分 - 31665
排名 - 1331
最新随笔
1. Java标准类库提供的容器总结
2. Java中类型与类的区别
3. 发现一个很好的专题:实时 Java 系列
4. Java程序动态分析工具有哪些?
5. 编程该学些啥?
6. 一个解析Java Class文件的实例
7. Class文件格式解析
8. 一个读取Class文件的示例程序
最新评论
1. re: 一个解析Java Class文件的实例
好强大啊
--dereky
2. re: 一个解析Java Class文件的实例[未登录]
写的真好
--wei
3. re: 一个解析Java Class文件的实例[未登录]
写得太好了!高手。有机会的话希望能请教你些问题。
--lynn
4. re: 一个读取Class文件的示例程序
好!
--doon
5. re: 一个解析Java Class文件的实例[未登录]
太厉害了!
--阿飞
6. re: Class文件格式解析[未登录]
写的不错,谢谢
--fay
7. re: Java标准类库提供的容器总结
写的不错
--代理163
8. re: Java中类型与类的区别
嗯,及时纠错,改正过来了:)
@lvq810
--独孤求败
9. re: Java中类型与类的区别
评论内容较长,点击标题查看
--独孤求败
10. re: Java中类型与类的区别
char是无符号的
--lvq810
阅读排行榜
1. Class文件格式解析(11133)
2. 一个解析Java Class文件的实例(4848)
3. 一个读取Class文件的示例程序(4562)
4. Java程序动态分析工具有哪些?(2389)
5. Java标准类库提供的容器总结(2333)
评论排行榜
1. 一个解析Java Class文件的实例(33)
2. Java程序动态分析工具有哪些?(7)
3. Java中类型与类的区别(5)
4. Class文件格式解析(5)
5. 一个读取Class文件的示例程序(5)