我自定义了一个classloader,目前只能加载.class文件,现在想实现一个方法,能够加载.jar文件。对.jar文件的存在形式还不是很理解。问题是,.jar文件在内存中是如何被加载的呢?是把整个.jar文件以某种形式读取进来,单独的开辟一块内存存储XX.jar文件,还是把XX.jar文件中的每一个.class文件以字节码的形式加载到内存中?

解决方案 »

  1.   

    用ZIP这个类 解压缩 JAR文件.然后再classloader读.class文件
      

  2.   

    根本就不存在“把 .jar 文件加载起来”的概念。ClassLoader 的作用就是把需要的 class 加载到 JVM 中。你自己实现的 ClassLoader 就是用你自己实现的随便什么方式,得到一个二进制流,然后通过 defineClass() 变成一个 Class 对象交付给 JVM。至于你自己实现的这个 ClassLoader“碰巧”是从一个 .jar 中获取一个二进制流,那随便你怎么做好了,你愿意怎么从这个 .jar 中读取数据都可以,要不要把它保持在内存里也随你  :D