package casic.com.base.test3;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
/**
* Copyright © 2018 eSunny Info. Tech Ltd. All rights reserved.
*
* @Package: casic.com.base.test3
* @author: lh
* @date: 2018年5月1日 下午11:03:17
*/
public class CasicClassLoader extends ClassLoader{
public static void main(String[] args) throws Exception {
String srcPath =args[0];
String destDir = args[1];
String destFileName =srcPath.substring(srcPath.lastIndexOf("\\")+1);
String destPath = destDir + "\\" +destFileName;
FileInputStream fis = new FileInputStream(srcPath);
FileOutputStream fos = new FileOutputStream(destPath);
cypher(fis,fos);
fis.close();
fos.close();
}
private static void cypher(InputStream ips, OutputStream ops) throws Exception {
int b = -1;
while((b = ips.read()) != -1) {
ops.write(b ^ 0xff);
}
}
private String classDir;
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
String classFileName = classDir + "\\" + name + ".class";
try {
FileInputStream fis = new FileInputStream(classFileName);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
cypher(fis,bos);
byte[] bytes = bos.toByteArray();
return defineClass(bytes, 0, bytes.length);
} catch (Exception e) {
e.printStackTrace();
}
return super.findClass(name);
}
public CasicClassLoader() {
}
public CasicClassLoader(String classDir) {
this.classDir = classDir;
}
}
import java.util.Date;
public class ClassLoaderAttachMent extends Date{
@Override
public String toString() {
return "hello,casic";
}
}
/**
* Copyright © 2018 eSunny Info. Tech Ltd. All rights reserved.
*
* @Package: casic.com.base.test3
* @author: lh
* @date: 2018年5月1日 下午7:50:26
*/
public class ClassLoaderTest {
public static void main(String[] args) throws Exception {
Class clazz = new CasicClassLoader("casic").loadClass("ClassLoaderAttachMent");
Date d1 = (Date) clazz.newInstance();
System.out.println(d1.toString());
}
}