下面是一些从仅包含单个文件的 zip 文件中提取文件的代码。但是,提取的文件与通过 WinZip 或其他 zip 实用程序提取的相同文件不匹配。如果文件包含奇数个字节,我希望它可能会关闭一个字节(因为我的缓冲区大小为 2,一旦读取失败,我就会中止)。但是,在分析(使用 WinMerge 或 Diff)以下代码提取的文件与通过 Winzip 提取的文件时,Java 提取中存在多个字节丢失的区域。有谁知道为什么或如何解决这个问题?
package zipinputtest;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.zip.ZipInputStream;
public class test2 {
public static void main(String[] args) {
try {
ZipInputStream zis = new ZipInputStream(new FileInputStream("C:\\temp\\sample3.zip"));
File outputfile = new File("C:\\temp\\sample3.bin");
OutputStream os = new BufferedOutputStream(new FileOutputStream(outputfile));
byte[] buffer2 = new byte[2];
zis.getNextEntry();
while(true) {
if(zis.read(buffer2) != -1) {
os.write(buffer2);
}
else break;
}
os.flush();
os.close();
zis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
我能够使用此图像产生错误(将其保存并压缩为 sample3.zip 并在其上运行代码),但任何足够大小的二进制文件都应显示差异。