private byte[] loadClassData(String className) {
ZipInputStream in = null;
FileInputStream fis = null;
try {
fis = new FileInputStream(jarPath);
in = new ZipInputStream(new BufferedInputStream(fis));
ZipEntry entry;
while ((entry = in.getNextEntry()) != null) {
if (entry.getName().contains(".class")) {
String outFileName = entry.getName()
.substring(0, entry.getName().lastIndexOf('.'))
.replace('/', '.');
if (outFileName.equals(className)) {
if (entry.getSize() == -1) {
Log.e("loadClassData", "can't read the file!");
return null;
}
byte[] classData = new byte[(int) entry.getSize()];
in.read(classData);
return classData;
}
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fis.close();
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
在调试中,我总是得到“in”的大小是512字节,这样我就无法得到我文件的其余部分了,我不知道为什么.ZipInputStream有大小限制吗? 谢谢!
答案 0 :(得分:1)
if (entry.getSize() == -1) {
ZipEntry.getSize()
返回条目数据的未压缩大小,如果不知道则返回 -1。 。您需要删除此检查。
我总是得到“in”的大小是512字节
你是如何检查的? ZipInputStream没有大小属性。无论你在检查什么是无关的。
This似乎是ZipInputStream
用法的一个很好的规范示例。