KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sslexplorer > agent > client > util > ByteArrayClassLoader


1 package com.sslexplorer.agent.client.util;
2
3 import java.util.Hashtable JavaDoc;
4
5 /**
6  * Class loader that creates classes from arrays of bytes
7  *
8  * @author Brett Smith <a HREF="mailto: brett@3sp.com">&lt;brett@3sp.com&gt;</a>
9  */

10 public class ByteArrayClassLoader extends ClassLoader JavaDoc {
11
12     static ByteArrayClassLoader instance;
13
14     private Hashtable JavaDoc classes = new Hashtable JavaDoc();
15     private ClassLoader JavaDoc parent;
16
17     /**
18      * Constructor.
19      *
20      * @param parent parent class loader
21      */

22     public ByteArrayClassLoader(ClassLoader JavaDoc parent) {
23         this.parent = parent;
24     }
25
26     Class JavaDoc createFromByteArray(String JavaDoc name, byte[] buf, int off, int len) {
27
28         if (!classes.containsKey(name)) {
29             classes.put(name, defineClass(name, buf, off, len));
30         }
31         return (Class JavaDoc) classes.get(name);
32
33     }
34
35     /* (non-Javadoc)
36      * @see java.lang.ClassLoader#loadClass(java.lang.String, boolean)
37      */

38     public Class JavaDoc loadClass(String JavaDoc name, boolean resolve) throws ClassNotFoundException JavaDoc {
39
40         if (classes.containsKey(name)) {
41             return (Class JavaDoc) classes.get(name);
42         } else
43             return parent.loadClass(name);
44     }
45
46     /**
47      * Get a static instance of this class loader
48      *
49      * @return class loader
50      */

51     public static ByteArrayClassLoader getInstance() {
52         return instance == null ? instance = new ByteArrayClassLoader(ByteArrayClassLoader.class.getClassLoader()) : instance;
53     }
54 }
55
Popular Tags