A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高波 中级黑马   /  2013-12-31 20:46  /  794 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package cn.itcast.day2;

  2. import java.io.ByteArrayOutputStream;
  3. import java.io.FileInputStream;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileOutputStream;
  6. import java.io.InputStream;
  7. import java.io.OutputStream;

  8. public class MyClassLoader extends ClassLoader{

  9.         /**
  10.          * @param args
  11.          */
  12.         public static void main(String[] args) throws Exception {
  13.                 // TODO Auto-generated method stub
  14.                 String srcPath = args[0];
  15.                 String destDir = args[1];
  16.                 FileInputStream fis = new FileInputStream(srcPath);
  17.                 String destFileName = srcPath.substring(srcPath.lastIndexOf('\\')+1);
  18.                 String destPath = destDir + "\\" + destFileName;
  19.                 FileOutputStream fos = new FileOutputStream(destPath);
  20.                 cypher(fis,fos);
  21.                 fis.close();
  22.                 fos.close();
  23.         }
  24.        
  25.         private static void cypher(InputStream ips ,OutputStream ops) throws Exception{
  26.                 int b = -1;
  27.                 while((b=ips.read())!=-1){
  28.                         ops.write(b ^ 0xff);
  29.                 }
  30.         }

  31.         private String classDir;

  32.         @Override
  33.         protected Class<?> findClass(String name) throws ClassNotFoundException {
  34.                 // TODO Auto-generated method stub
  35.                 String classFileName = classDir + "\\"  + name.substring(name.lastIndexOf('.')+1) + ".class";
  36.                 try {
  37.                         FileInputStream fis = new FileInputStream(classFileName);
  38.                         ByteArrayOutputStream  bos = new ByteArrayOutputStream();
  39.                         cypher(fis,bos);
  40.                         fis.close();
  41.                         System.out.println("aaa");
  42.                         byte[] bytes = bos.toByteArray();
  43.                         return defineClass(bytes, 0, bytes.length);
  44.                 } catch (Exception e) {
  45.                         // TODO Auto-generated catch block
  46.                         e.printStackTrace();
  47.                 }
  48.                 return null;
  49.         }
  50.        
  51.         public MyClassLoader(){
  52.                
  53.         }
  54.        
  55.         public MyClassLoader(String classDir){
  56.                 this.classDir = classDir;
  57.         }
  58. }
复制代码

张老师的自定义类加载器,在利用自定义类加载器加载类文件时,找到的是已经加密的文件,具体是怎样用自定义类加载器解密的,流程是怎样的?求大神讲解,已晕

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马