- Java虛擬機(jī)字節(jié)碼:從入門到實(shí)戰(zhàn)
- 吳就業(yè)
- 210字
- 2021-01-08 19:08:25
解析魔數(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文件"); } } }
推薦閱讀
- 深度實(shí)踐OpenStack:基于Python的OpenStack組件開發(fā)
- Mastering Zabbix(Second Edition)
- 機(jī)器人Python青少年編程開發(fā)實(shí)例
- Functional Programming in JavaScript
- Python編程完全入門教程
- Android NDK Beginner’s Guide
- Visual Basic程序設(shè)計(jì)教程
- PHP+MySQL+Dreamweaver動態(tài)網(wǎng)站開發(fā)實(shí)例教程
- 大學(xué)計(jì)算機(jī)基礎(chǔ)(第2版)(微課版)
- Nginx Lua開發(fā)實(shí)戰(zhàn)
- Machine Learning in Java
- Magento 2 Beginners Guide
- 從零開始學(xué)UI:概念解析、實(shí)戰(zhàn)提高、突破規(guī)則
- Mastering PowerCLI
- Mapping with ArcGIS Pro