2010-04-10 14 views

Respuesta

6

Esto es poco probable, ya que lo encontrará si intenta hacerlo usted mismo. No podrá acceder aleatoriamente a InputStream para buscar las clases a medida que se solicitan, por lo que tendrá que almacenar en caché los contenidos en la memoria o en el sistema de archivos.

Si almacena en caché en el disco, simplemente use URLClassLoader.

Si almacena en memoria caché, necesitará crear algún tipo de Map con JarInputStream y luego extender ClassLoader (anulando los métodos apropiados). La desventaja de este enfoque es que mantiene los datos en la RAM innecesariamente.

0

Sé que esto no es realmente una respuesta a su pregunta con respecto a JAR/InputStream. Pero seguir puede ser una solución alternativa a lo que está tratando de lograr. Aquí hay algunos códigos que agregarán una URL a classpath.

Es posible convertir un java.io.File a URL como f.toURI().toURL()

/** 
* Adds a URL to current classpath. 
* @param url url 
*/ 
public static void addURL(URL u) {  
    URLClassLoader sysloader = (URLClassLoader)ClassLoader.getSystemClassLoader(); 
    try { 
     Method method = URLClassLoader.class.getDeclaredMethod("addURL",parameters); 
     method.setAccessible(true); 
     method.invoke(sysloader,new Object[]{u}); 
     System.out.println("Dynamically added " + u.toString() + " to classLoader"); 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
Cuestiones relacionadas