我有生成 zip 输出流的代码,然后我通过 servlet 的响应流发送该流。在我的 Mac 上进行开发测试时,一切正常,但是,当我将代码放在我的服务器 (RHEL) 上时,zip 存档似乎已损坏。当我尝试使用 jar 列出文件的内容时,我得到:
java.util.zip.ZipException:打开 zip 文件时出错
但奇怪的是,使用 jar 提取归档文件(但是其他解压缩文件失败)。
为了进一步测试,我确保 zip 文件的内容与来自我的 mac 和 RHEL 的内容完全相同。在这两种情况下,zip 文件的大小完全相同,但是哈希值 (MD5) 不同。
正如我所说,生成 zip 文件的代码以及内容完全相同,所以我不知道发生了什么。我相当确定我的 zip 文件创建是正确的,因为它在其中一个平台上工作。在 RHEL 服务器上生成 zip 文件时没有任何问题的迹象。
想法?谢谢您的帮助。
编辑:这是代码...
// first add the kml document
ZipOutputStream stream = new ZipOutputStream(response.getOutputStream());
stream.putNextEntry(new ZipEntry("doc.kml"));
stream.write(kml.getBytes(), 0, kml.length());
stream.closeEntry();
File image = null;
byte[] bytes = null;
FileInputStream fstream = null;
// include the images for each type
File images = new File("/tmp/images");
String filename = null;
for(Type type: types) {
filename = type.getName() + ".png";
image = new File(images, filename);
bytes = new byte[(int)image.length()];
fstream = new FileInputStream(image);
fstream.read(bytes);
stream.putNextEntry(new ZipEntry(filename));
stream.write(bytes);
stream.closeEntry();
fstream.close();
}
stream.finish();
stream.flush();
stream.close();
EDIT2:情节变厚了,只要存档中只有一个图像,似乎 RHEL zip 流就可以了。希望这足以让谷歌帮助我。