代码之家  ›  专栏  ›  技术社区  ›  brabster

从jar作为输入流加载?

  •  6
  • brabster  · 技术社区  · 14 年前

    我是否可以使用类加载器实现从输入流加载类?

    我正在尝试将一个jar加载到一个新的类加载器中。

    2 回复  |  直到 14 年前
        1
  •  6
  •   McDowell    14 年前

    这是不太可能的,因为你会发现,如果你尝试自己去做。您将无法随机访问 InputStream 要按请求查找类,您必须将内容缓存在内存或文件系统中。

    如果您在磁盘上缓存,只需使用 URLClassLoader

    如果在内存中缓存,则需要创建 Map 具有 JarInputStream 然后延长 ClassLoader (覆盖适当的方法)。这种方法的缺点是不必要地将数据保存在RAM中。

        2
  •  0
  •   msrd0 Gordon Linoff    10 年前

    我知道这不是你关于jar问题的答案/ InputStream . 但以下可能是一个替代的解决方案,你正在努力实现什么。 下面是一些代码,它们将向类路径添加一个URL。

    您可以转换 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();
        }
    }