官术网_书友最值得收藏!

解析魔數(shù)

根據(jù)表2-1可知,魔數(shù)占四個字節(jié),它只是用來確定這個文件是否是一個class文件。魔數(shù)固定值為0xCAFEBABE,這個值永遠(yuǎn)不會改變。

魔數(shù)解析的實(shí)現(xiàn)很簡單,只需要從class文件字節(jié)緩存中連續(xù)讀取四個字節(jié),將這四個字節(jié)轉(zhuǎn)為U4對象,并賦值給ClassFile對象的magic字段。魔數(shù)解析器的實(shí)現(xiàn)如代碼清單2-7所示。

代碼清單2-7 魔數(shù)解析器

public class MagicHandler implements BaseByteCodeHandler {
   // 排序排在第一個
    @Override
    public int order() {
        return 0;
    }

    @Override
public void read(ByteBuffer codeBuf, ClassFile classFile) throws Exception {
  // 連續(xù)讀取四個字節(jié)并轉(zhuǎn)為U4對象
        classFile.setMagic(new U4(codeBuf.get(), codeBuf.get(),codeBuf.get(), codeBuf.get()));
        if (!"0xCAFEBABE".equalsIgnoreCase(classFile.getMagic() .toHexString())) {
            throw new Exception("這不是一個Class文件");
        }
    }

}
主站蜘蛛池模板: 启东市| 宜丰县| 郎溪县| 玉田县| 宿州市| 杭锦旗| 教育| 松潘县| 车险| 朝阳区| 平乡县| 搜索| 拉孜县| 常熟市| 临泽县| 光山县| 道真| 罗城| 汤阴县| 玉山县| 漠河县| 泗洪县| 鱼台县| 玛曲县| 禄丰县| 通榆县| 靖西县| 上杭县| 佛坪县| 三台县| 蒲城县| 马鞍山市| 天峨县| 安陆市| 精河县| 抚松县| 托克逊县| 武邑县| 南江县| 乌拉特前旗| 九寨沟县|