在进行了解JAVA CLASS文件解析时必须要明白的三个概念
2008-12-18 10:21
549 查看
在讲Class[/b]文件的格式之前,要介绍三个概念:
1)数据类型:《JVM Spec》(2nded)中指出,Java[/b] Class[/b]文件的数据用自己定义的一个数据类型集来表示,即u1,u2,u4,分别用于表示一个无符号类型的、占1,2,4个字节的数据。在《Inside JVM》(2nded)一书中,作者把这个数据类型集称之为Class[/b]文件的基本类型,本人觉得比较形象,便于理解。所以,在本文中,我们也用基本类型来表示Java[/b] Class[/b]文件的数据。
2)表:根据《JVM Spec》(2nded)中的定义,表(table)由项(定义见3)组成,用于几种Class[/b]文件结构中。《JVM Spec》(2nded)中指出,Java[/b] Class[/b]文件格式用一个类似于C结构的记号编写的伪结构来表示。这个伪结构指的就是这里的表,例如下面的ClassFile表就是这种伪结构的一个典型例子,下文中所有的表都是指这种伪结构的表。表的大小是可变的,这是因为它的组成部分项是可变的。注意;这里的可变是针对Class[/b]层次而言的,即在不同的Class[/b]文件中该项的大小可能不一样的,但是对于每一个具体的Class[/b]文件来说,这个项的大小又是一定的,因而这个表的大小也是一定的。那么,项为什么是可变的呢?请看下面的分析。
3)项:描述Java[/b] Class[/b]文
件格式的结构的内容称为项(items)。每个项都有自己的类型和名称。项的类型可能是基本类型,也可能是一个表的名字,这种项都是一些数组项。数组项的
每一个元素都是一个表,这个表同顶层的ClassFile表一样,也都是一种伪结构,也都是由一些项构成的,而且这些表不一定是同一种格式的,因此数组项
也可以看作一个可变大小的结构流J。这些表对于该数组项来说就是子项,当然子项可能还有子项(目前子项的深度最多就两层)。项的名称,没有什么好说的,就
是《JVM
Spec》(2nded)中指定的一些名称。另外,项也是有大小的,对于没有子项的项来说,其大小是固定的;对于有子项的项来说,其大小是可变的。在一个
具体的Class[/b]文件中,一个可变项(数组)的大小都会在其前一项中指定,为什么会是这样的呢?因为《JVM Spec》(2nded)中就是这么定义的!在Class[/b]文件中,每个项按规范中定义好的顺序存储在Class[/b]文件中,相邻的项之间没有任何间隔,连续的项(数组)也是按顺序存储,不进行填充或者对齐,这样可以使Class[/b]文件紧凑。
好了,我想这三个概念我已经解释地比较清楚了,下面开始正式解析[/b]Class[/b]文件的格式。
1)数据类型:《JVM Spec》(2nded)中指出,Java[/b] Class[/b]文件的数据用自己定义的一个数据类型集来表示,即u1,u2,u4,分别用于表示一个无符号类型的、占1,2,4个字节的数据。在《Inside JVM》(2nded)一书中,作者把这个数据类型集称之为Class[/b]文件的基本类型,本人觉得比较形象,便于理解。所以,在本文中,我们也用基本类型来表示Java[/b] Class[/b]文件的数据。
2)表:根据《JVM Spec》(2nded)中的定义,表(table)由项(定义见3)组成,用于几种Class[/b]文件结构中。《JVM Spec》(2nded)中指出,Java[/b] Class[/b]文件格式用一个类似于C结构的记号编写的伪结构来表示。这个伪结构指的就是这里的表,例如下面的ClassFile表就是这种伪结构的一个典型例子,下文中所有的表都是指这种伪结构的表。表的大小是可变的,这是因为它的组成部分项是可变的。注意;这里的可变是针对Class[/b]层次而言的,即在不同的Class[/b]文件中该项的大小可能不一样的,但是对于每一个具体的Class[/b]文件来说,这个项的大小又是一定的,因而这个表的大小也是一定的。那么,项为什么是可变的呢?请看下面的分析。
3)项:描述Java[/b] Class[/b]文
件格式的结构的内容称为项(items)。每个项都有自己的类型和名称。项的类型可能是基本类型,也可能是一个表的名字,这种项都是一些数组项。数组项的
每一个元素都是一个表,这个表同顶层的ClassFile表一样,也都是一种伪结构,也都是由一些项构成的,而且这些表不一定是同一种格式的,因此数组项
也可以看作一个可变大小的结构流J。这些表对于该数组项来说就是子项,当然子项可能还有子项(目前子项的深度最多就两层)。项的名称,没有什么好说的,就
是《JVM
Spec》(2nded)中指定的一些名称。另外,项也是有大小的,对于没有子项的项来说,其大小是固定的;对于有子项的项来说,其大小是可变的。在一个
具体的Class[/b]文件中,一个可变项(数组)的大小都会在其前一项中指定,为什么会是这样的呢?因为《JVM Spec》(2nded)中就是这么定义的!在Class[/b]文件中,每个项按规范中定义好的顺序存储在Class[/b]文件中,相邻的项之间没有任何间隔,连续的项(数组)也是按顺序存储,不进行填充或者对齐,这样可以使Class[/b]文件紧凑。
好了,我想这三个概念我已经解释地比较清楚了,下面开始正式解析[/b]Class[/b]文件的格式。
相关文章推荐
- 解析java的*.class文件
- Java编译后生成的若干个class文件名称解析
- java class文件格式解析(摘)
- Jvm之用java解析class文件
- java 高新技术【10】 编写对class文件进行加密的工具类
- 面试Java前必须了解的10个概念
- java class 文件解析
- java中class文件解析
- [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系
- 解析Java的Class文件格式——解析魔数和版本号
- 无法解析类型 java.lang.Object。从必需的 .class 文件间接引用了它
- java Class文件内部结构解析
- java高分局之class文件解析
- Android 报错 - 无法解析类型 java.lang.Object。从必需的 .class 文件间接引用了它
- [1] java文件的名字必须与public class后面的字段相同
- 无法解析类型 java.lang.Object。从必需的 .class 文件间接引用了它
- Java解析魔兽争霸3录像W3G文件(四):解析游戏进行时的信息
- Java 动态加载jar和class文件实例解析
- 深入java虚拟机--Class文件实例解析
- Java--对于 class文件进行加密 然后通过我们自己写的类加载器进行加载指定类