日期:2014-05-20  浏览次数:20738 次

自定义加载器如何加载JAR包
我自定义了一个classloader,目前只能加载.class文件,现在想实现一个方法,能够加载.jar文件。

对.jar文件的存在形式还不是很理解。

问题是,.jar文件在内存中是如何被加载的呢?是把整个.jar文件以某种形式读取进来,单独的开辟一块内存存储XX.jar文件,还是把XX.jar文件中的每一个.class文件以字节码的形式加载到内存中?

------解决方案--------------------
用ZIP这个类 解压缩 JAR文件.然后再classloader读.class文件
------解决方案--------------------
根本就不存在“把 .jar 文件加载起来”的概念。

ClassLoader 的作用就是把需要的 class 加载到 JVM 中。你自己实现的 ClassLoader 就是用你自己实现的随便什么方式,得到一个二进制流,然后通过 defineClass() 变成一个 Class 对象交付给 JVM。

至于你自己实现的这个 ClassLoader“碰巧”是从一个 .jar 中获取一个二进制流,那随便你怎么做好了,你愿意怎么从这个 .jar 中读取数据都可以,要不要把它保持在内存里也随你 :D