标签:类 classloader javase class java
第8单元:类加载器的深入讲解与应用 |
第8单元:类加载器的深入讲解与应用 |
44.类加载器及其委托机制的深入分析
.png)
.png)
.png)
package java_5;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class MyClassLoader extends ClassLoader {
static String srcPath;
static String destPath;
public static void main(String[] args) throws Exception {
srcPath = args[0];
destPath = args[1];
InputStream in = new FileInputStream(srcPath );
srcPath = srcPath .substring(0, srcPath.lastIndexOf('\\' ) - 6);
OutputStream out = new FileOutputStream(srcPath + "\\" + destPath
+ ".class");
ClassLoader cl = MyClassLoader.class .getClassLoader().getParent();
System. out.println(cl.getClass().getName());
addSecrity(out, in);
}
public static void addSecrity(OutputStream dest, InputStream src)
throws IOException {
int b = 0;
while ((b = src.read()) != -1) {
b = b ^ 0xff;
dest.write(b);
}
}
@Override
protected java.lang.Class<?> findClass(String name)
throws ClassNotFoundException {
String srcPath = "G:\\workplace\\javase\\lib\\" ;
InputStream in = null;
try {
in = new FileInputStream(srcPath+name+".class" );
} catch (FileNotFoundException e) {
e.printStackTrace();
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
addSecrity(baos,in);
} catch (IOException e) {
e.printStackTrace();
}
byte[] bytes = baos.toByteArray();
Class clazz = defineClass (bytes, 0, bytes.length );
return clazz;
};
private String name;
public MyClassLoader() {
}
public MyClassLoader(String name) {
this.name = name;
}
}.png)
标签:类 classloader javase class java
原文地址:http://blog.csdn.net/u011218159/article/details/43897901