package week04.jvm.loader; import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.net.URL; import java.util.ArrayList; import java.util.List; public class ClassFileLoader { private List<String> clzPaths = new ArrayList<String>(); public byte[] readBinaryCode(String className) throws Exception { URL base = this.getClass().getResource("/"); String baseToString = ""+base; String filePath = baseToString.replaceAll("file:/", "")+className.replace(".", "\\")+".class"; //String filePath = clzPaths.get(0)+"\\"+className.replace(".", "\\")+".class"; //符合Junit测试调用addClassPath方法 File file = new File(filePath); BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while((len = bis.read(buffer)) != -1){ baos.write(buffer,0,len); } return baos.toByteArray(); } public void addClassPath(String path) { clzPaths.add(path); } public String getClassPath(){ StringBuffer strBuffer = new StringBuffer(); for(int i=0;i<clzPaths.size();i++){ if(i == (clzPaths.size() - 1)){ strBuffer.append(clzPaths.get(i)); }else{ strBuffer.append(clzPaths.get(i)+";"); } } return strBuffer.toString(); } }