home *** CD-ROM | disk | FTP | other *** search
/ Magazyn WWW 2000 June / www-06-2000.iso / java / HashtableClassLoader.java < prev    next >
Text File  |  2000-04-11  |  984b  |  45 lines

  1. import java.util.*;
  2. import java.io.*;
  3.  
  4. public class HashtableClassLoader extends ClassLoader {
  5.     private Hashtable cache = new Hashtable();
  6.     private Hashtable data;
  7.  
  8.     public HashtableClassLoader(Hashtable data) {
  9.         this.data=data;
  10.     }
  11.  
  12.     public synchronized Class loadClass(String name, boolean resolve) throws ClassNotFoundException {
  13.         String name0=name.replace('.', '/');
  14.         Class c = (Class)cache.get(name);
  15.         if (c == null) {
  16.  
  17.             byte[] bytes = (byte[])data.get(name0+".class");
  18.             if (bytes==null) {
  19.                 c=findSystemClass(name);
  20.                 if (c==null) {
  21.                     throw new ClassNotFoundException(name);
  22.                 }
  23.                 return c;
  24.             }
  25.  
  26.             c = defineClass(name, bytes, 0, bytes.length);
  27.             cache.put(name, c);
  28.         }
  29.  
  30.         if (resolve) {
  31.             resolveClass(c);
  32.         }
  33.         return c;
  34.     }
  35.  
  36.     public InputStream getResourceAsStream(String name) {
  37.         byte[] bytes=(byte[])data.get(name);
  38.         if (bytes!=null) {
  39.             return new ByteArrayInputStream(bytes);
  40.         }
  41.         return null;
  42.     }
  43. }
  44.  
  45.