我想从一个.jar包中,读取其中一个.class文件,并进行加载。下面是我程序的一个片段:
in = new JarInputStream(new FileInputStream(jarPath));
JarEntry entry;
while ((entry = in.getNextJarEntry()) != null) {
String outFileName = entry.getName().substring(
entry.getName().lastIndexOf("/") + 1,
entry.getName().length());
if (outFileName.equals(className + ".class")) {
if (entry.getSize() == -1) {
System.out.println("错误:无法读取该文件大小!");
return null;
}
System.out.println(entry.getSize());
byte[] classData = new byte[(int) entry.getSize()];
in.read(classData);
return loadClass(classData, className);
}
}
在读取的过程中,读取到的.jar包中的类的entry.getSize() 的返回值总是为-1。我查了查API,上面只是写着:“返回条目数据的未压缩大小;如果未知,则返回 -1。”却不知道什么时候会“未知”啊?我用系统的类文件测试过,就能正常返回大小。而自己写的代码,自己压的jar包,就是“未知”....哪位朋友帮忙指点下,不胜感谢。
in = new JarInputStream(new FileInputStream(jarPath));
JarEntry entry;
while ((entry = in.getNextJarEntry()) != null) {
String outFileName = entry.getName().substring(
entry.getName().lastIndexOf("/") + 1,
entry.getName().length());
if (outFileName.equals(className + ".class")) {
if (entry.getSize() == -1) {
System.out.println("错误:无法读取该文件大小!");
return null;
}
System.out.println(entry.getSize());
byte[] classData = new byte[(int) entry.getSize()];
in.read(classData);
return loadClass(classData, className);
}
}
在读取的过程中,读取到的.jar包中的类的entry.getSize() 的返回值总是为-1。我查了查API,上面只是写着:“返回条目数据的未压缩大小;如果未知,则返回 -1。”却不知道什么时候会“未知”啊?我用系统的类文件测试过,就能正常返回大小。而自己写的代码,自己压的jar包,就是“未知”....哪位朋友帮忙指点下,不胜感谢。
解决方案 »
- 关于FileInputStream重复读取的问题
- 用java画矩形,错哪儿了?帮帮忙。。
- jboss 1099端口不能远程访问
- 静态工厂模式
- 怎样才是面向对象的思想
- jsp编写一个数据库操作,我想把数据库连接信息写在web.xml中?
- 大家知道有什么好的国外的学习JAVA的网站或者论坛吗??
- org.eclipse.swt.SWTException: Class ID not found in registry
- 散分第二问:请讲一讲public, private, protect, friendly。
- 请大家谈谈 EJB 和 J2EE 的关系呀!
- Java Communication API在哪里下载啊?
- java多List排序问题
in = new JarInputStream(new FileInputStream(jarPath));
JarEntry entry;
while ((entry = in.getNextJarEntry()) != null) {
String outFileName = entry.getName().substring(
entry.getName().lastIndexOf("/") + 1,
entry.getName().length());
if (outFileName.equals(className + ".class")) {
if (entry.getSize() == -1) {
System.out.println("错误:无法读取该文件大小!");
return null;
}
System.out.println(entry.getSize());
byte[] classData = new byte[(int) entry.getSize()];
in.read(classData);
return loadClass(classData, className);
}
}