- 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异常,还是报错,求大神指点!! 
 
 |