码迷,mamicode.com
首页 > 其他好文 > 详细

类加载器的深入讲解与应用

时间:2015-02-21 09:43:17      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:   classloader   javase   class   java   



第8单元:类加载器的深入讲解与应用

第8单元:类加载器的深入讲解与应用


第8单元:类加载器的深入讲解与应用
44.类加载器及其委托机制的深入分析
技术分享技术分享技术分享
技术分享
技术分享
技术分享
package java_5;

import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class MyClassLoader extends ClassLoader {
    static String srcPath;
    static String destPath;

    public static void main(String[] args) throws Exception {
          srcPath = args[0];
          destPath = args[1];
         InputStream in = new FileInputStream(srcPath );
          srcPath = srcPath .substring(0, srcPath.lastIndexOf('\\' ) - 6);
         OutputStream out = new FileOutputStream(srcPath + "\\" + destPath
                 + ".class");
         ClassLoader cl = MyClassLoader.class .getClassLoader().getParent();
        System. out.println(cl.getClass().getName());
          addSecrity(out, in);
    }

    public static void addSecrity(OutputStream dest, InputStream src)
              throws IOException {
          int b = 0;
          while ((b = src.read()) != -1) {
             b = b ^ 0xff;
             dest.write(b);
         }

    }

    @Override
    protected java.lang.Class<?> findClass(String name)
              throws ClassNotFoundException {
         String srcPath = "G:\\workplace\\javase\\lib\\" ;
         InputStream in = null;
          try {
             in = new FileInputStream(srcPath+name+".class" );
         } catch (FileNotFoundException e) {
             e.printStackTrace();
         }
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
          try {
              addSecrity(baos,in);
         } catch (IOException e) {
             e.printStackTrace();
         }
          byte[] bytes = baos.toByteArray();
          Class clazz = defineClass (bytes, 0, bytes.length );
          return clazz;
    };

    private String name;

    public MyClassLoader() {
    }

    public MyClassLoader(String name) {
          this.name = name;
    }

}


有包名的类不能调用无包名的类
技术分享
技术分享

类加载器的深入讲解与应用

标签:   classloader   javase   class   java   

原文地址:http://blog.csdn.net/u011218159/article/details/43897901

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!