所有的文件的开头4个字节都被称为魔数,可以被鉴定是否是一个Class文件
在Jpg等文件中都有魔数,这也是方便有人去篡改这个文件后面的扩展名
在Java的Class文件中,魔数被确定为 0xCAFEBABE 咖啡宝贝,貌似是来源于某个咖啡品牌
在Java中,我们可以通过魔数做一些文件鉴别的事情,比如
(可以使用NotePad++ 加上 Hex-Editor 插件来读取Class文件)
对应的java中,可以判断是什么类型的文件
public static String geFileType(InputStream file) throws IOException {
HashMap<String, String> fileTypes = new HashMap<>(); fileTypes.put(“47494638″,”GIF”); fileTypes.put(“89504E47″,”PNG”); fileTypes.put(“FFD8FF”,”JPEG”); fileTypes.put(“424D”,”BMP”); byte[] head = new byte[28]; //输入流可能还有其他作用,先不关 file.read(head,0,28); String magicNum = new StringBuilder().append(String.format(“%02X “, head)).toString(); AtomicReference<String> realFile = null; fileTypes.keySet().stream().forEach(s->{ if(magicNum.equals(s)){ realFile.set(fileTypes.get(s)); } }); return realFile.get(); } |