在使用org.apache.commons.compress读取嵌入式归档文件时,我遇到了一些非常奇怪的错误,我怀疑是我的经验不足困扰着我。
在运行我的代码时,我会得到各种截断的zip文件错误(以及其他截断的文件错误)。我怀疑这是我对ArchiveInputStream的使用
private final void handleArchive(String fileName, ArchiveInputStream ais) {
ArchiveEntry archiveEntry = null;
try {
while((archiveEntry = ais.getNextEntry()) != null) {
byte[] buffer = new byte[1024];
while(ais.read(buffer) != -1) {
handleFile(fileName + "/" + archiveEntry.getName(), archiveEntry.getSize(), new ByteArrayInputStream(buffer));
} catch(IOException ioe) {
ioe.printStackTrace();
}
}当我这样做时,archiveEntry = ais.getNextEntry()是否有效地关闭了我的ais,是否有任何方法使用公用压缩来读取嵌入式归档文件的字节?
发布于 2013-08-05 19:12:25
您正在执行一些wierd 看上去是什么?当你阅读你的档案时,每一个档案条目,您正在递归地调用read方法,这将导致打开下一个归档,而您的父代码仍在处理之前的归档。
在处理压缩文件中的任何新存档条目之前,您应该完全遍历归档条目。有点像
ArArchiveEntry entry = (ArArchiveEntry) arInput.getNextEntry();
byte[] content = new byte[entry.getSize()];
LOOP UNTIL entry.getSize() HAS BEEN READ {
arInput.read(content, offset, content.length - offset);
}如apache站点上的示例中所述
https://stackoverflow.com/questions/18065623
复制相似问题