- package first;
- /*题目:
- * 就是自己写带有加密功能的类加载器。
- * 运行结果:
- *
- * 用非法索引访问数组时抛出的异常!*/
- import java.io.ByteArrayOutputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- //主类必须继承ClassLoader,才可以直接使用difineClass
- public class Test extends ClassLoader {
- // 加密方法
- private static void encrypt(InputStream in, OutputStream out) {
- int b = -1;
- try {
- while ((b = in.read()) != -1) {
- out.write(b ^ 0xff);
- }
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- // 私有化一个ClassDir变量
- private String classDir = null;
- public Test() {
- }
- // 不能与类同名,但是有返回值,不是构造函数,那个,,
- public Test(String classDir) {
- this.classDir = classDir;
- }
- /*
- * classLoader的方法,findclass(String name) 使用指定的二进制名称查找类。返回值:Class<?>
- */
- protected Class<?> findClass(String classname) {
- // 静态字段separator,返回值是string类型,与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。
- String classPath = classDir + File.separator + classname + ".class";
- try {
- FileInputStream fin = new FileInputStream(new File(classPath));
- // ByteArrayOutputStream byte数组输出流
- ByteArrayOutputStream bout = new ByteArrayOutputStream();
- encrypt(fin, bout);
- encrypt(fin, bout);
- // 创建一个byte数组,用byte输出流的方法转换直接转换成byte[]
- byte[] bytes = bout.toByteArray();
- // 关闭输入流
- fin.close();
- // defineClass将bytes数组,转换成Class类的实例。
- return defineClass(null, bytes, 0, bytes.length);
- } catch (FileNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return null;
- }
- public static void main(String[] args) throws ArrayIndexOutOfBoundsException{
- String src = args[0];
- String dest = args[1];
- // string的 substring方法返回一个新字符串,它是此字符串的一个子字符串。
- // lastIndexOf方法返回指定子字符串在此字符串中最右边出现处的索引
- String classFileName = src.substring(src.lastIndexOf('\\') + 1);
- try {
- InputStream in = new FileInputStream(src);
- OutputStream out = new FileOutputStream(dest + "\\" + classFileName);
- encrypt(in, out);
- } catch (FileNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
复制代码
编译提示:ArrayIndexOutOfBoundsException
我在主函数上,throws异常,还是报错,求大神指点!!
|