2010-04-10 62 views

回答

6

這是不太可能的,你會發現如果你嘗試自己做。您將無法隨機訪問InputStream以根據請求查找類,因此您必須將內容緩存在內存或文件系統中。

如果您在磁盤上緩存,只需使用URLClassLoader即可。

如果你在內存中緩存,你需要創建一些MapJarInputStream然後擴展ClassLoader(覆蓋適當的方法)。這種方法的缺點是不必要地將數據保存在RAM中。

0

我知道這不是真的回答你的問題關於JAR/InputStream。 但是,以下可能是您嘗試實現的替代解決方案。 這裏有一些代碼會將URL添加到classpath中。

您可以將java.io.File轉換爲URL作爲 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(); 
    } 
}