手写类加载器(ClassLoader)

    xiaoxiao2022-07-13  205

     

    保存一下

    package com.lixianzhong.classLoader; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class MyClassLoader extends ClassLoader { private String rootPath; public MyClassLoader() { super(); } public MyClassLoader(String rootPath) { this.rootPath = rootPath; } @Override protected Class<?> findClass(String name) throws ClassNotFoundException { Class<?> clz = findLoadedClass(name); if (clz != null) return clz; byte[] classData = getData(name); clz = defineClass("com.lixianzhong.classLoader.Hello", classData, 0, classData.length); return clz; } private byte[] getData(String className) { String pathName = rootPath + className.replace(".", "/") + ".class"; System.out.println(pathName); byte[] bytes = null; try (FileInputStream fis = new FileInputStream(pathName); ByteArrayOutputStream bos = new ByteArrayOutputStream();) { byte[] flush = new byte[1024 * 1024]; int len = -1; while (-1 != (len = fis.read(flush))) { bos.write(flush); } bytes = bos.toByteArray(); } catch (Exception e) { System.out.println("异常"); } return bytes; } }

     

    最新回复(0)