黑马程序员技术交流社区

标题: 自己编写类的加载器? [打印本页]

作者: 蒲公英在飞    时间: 2014-8-16 19:24
标题: 自己编写类的加载器?
怎么自己编写类的加载器给文件加密?
作者: pengyu1801    时间: 2014-8-16 20:34
import java.io.*; //主类必须继承ClassLoader,才可以直接使用difineClass public class MyClassLoader1 extends ClassLoader{                          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();         }  }                         // 加密方法                         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 MyClassLoader1() {                                 }                                          // 不能与类同名,但是有返回值,不是构造函数,那个,,                         public MyClassLoader1(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);                                         // 创建一个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;         }                                           }
作者: jw在路途    时间: 2014-8-16 20:36
学习了,来过
作者: wfaly    时间: 2014-8-18 09:43
谢谢 楼主分享 ,学习了....
作者: 轩辕苍穹    时间: 2014-8-18 23:40
用Java混淆器
作者: 大★宝    时间: 2014-8-19 11:21
这个真不会,貌似挺复杂的
作者: liqi    时间: 2014-8-19 11:33
视频里有的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2