自定义类加载器加载指定压缩包中的类
来源:互联网 发布:电商美工工作计划 编辑:程序博客网 时间:2024/06/06 03:36
最近做项目需要自己写类加载器加载指定压缩包中的类(jar包),基本思路是得到指定的压缩包并通过java.util.jar包中的类访问其中的资源,找到指定的类名所对应的.class文件,得到其输入流,通过其输入流读取其中的字节并以字节数组的形式返回,通过ClassLoader中的方法加载此字节数组所代表的类.初始想法的代码如下(暂不考虑异常情况):
运行上述代码加载类发现随着类的不同有时成功有时报错,虽然错误描述不一样,但都是java.lang.ClassFormatError,总是出现这种情况,弄的我头都大了,上网找资料,开始以为是JDK的版本问题,于是把Eclipse的版本全部都调为一致的1.5版,后来自己用文本编辑器写代码,用最原始的方法编译并执行代码,发现从本地文件中读取.class字节码文件没有问题,一旦将文件打包再从包中读取就会出现同样的错误提示.后无意中发现当输入流的read(byte[],int,int)方法并不是一次性的读取指定长度的字节流,而是不确定的,尤其是在压缩文件中读取,经测试,我的压缩包中的字节码文件超过900字节就会报错,小于就没问题,所以应该是输入流的读取出现问题,遂调整思路如下:先得到字节码文件的总长度,一般情况下InputStream.available()方法和ZipEntry.getSize()方法都可得到,可以的话建议使用后者.通过得到的长度构造一个存放完整文件的字节数组,然后声明一个缓冲数组用来每次读取输入流中的数据,得到读取的长度并将读到的字节拷贝到前者数组中,最后通过完整文件的数组加载字节码文件,做此工作只需将第一个类的部分代码修改如下:
此时我的代码可以正确的加载类了.
- 自定义类加载器加载指定压缩包中的类
- 自定义类加载器加载指定目录下的类
- Java实现类加载器,加载指定包名下的所有类
- 如何加载指定jar中的类
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 深入研究DataList分页方法
- 开发人员一定要加入收藏夹的网站
- Apache的基本安装及简单配置
- Android 技术专题系列之六 --如何安装.apk到模拟
- Android 技术专题系列之七 -- 输入法 框架
- 自定义类加载器加载指定压缩包中的类
- Android 技术专题系列之八 -- 浏览器及web widget
- java.sql.SQLExecption:Io异常:Got minus one from a real call
- JavaScript开发中规范性的一点感想
- 一个简单的文件目录打印程序
- ASP.NET2.0中的App_Data文件的作用
- 俞敏洪同济大学演讲:度过有意义的生命
- MFC 应用程序中处理消息的顺序
- 大数乘法