为什么我的zip文件中的图像已损坏?

时间:2011-10-07 08:37:05

标签: java io zip java-7

我在java中生成一个zip文件,其中包含文本和图像文件的混合,这在一台计算机上工作正常,但在另一台计算机上我的图像文件已损坏(相同的java版本和操作系统);生成的文件大小相同但图像不会在图像编辑器/查看器中打开,文本文件也没问题。

ByteArrayOutputStream bos = new ByteArrayOutputStream();
ZipOutputStream zos = new ZipOutputStream(bos);
zos.setMethod(ZipOutputStream.DEFLATED);
addZipEntry(zos, "/forms/images/calendar.gif", "images/calendar.gif");
addZipEntry(zos, "/forms/templ/header.php", "templ/header.php");
zos.close();

private void addZipEntry(ZipOutputStream zos, String resourcePath, String entryName) throws IOException {
    ClassLoader cl = getClass().getClassLoader();
    InputStream is = cl.getResourceAsStream(resourcePath);
    zos.putNextEntry(new ZipEntry(entryName));
    zos.write(IOUtils.toByteArray(is));
    zos.closeEntry();
}

为什么图像被破坏的任何想法?

Here's a visual binary comparison between a corrupt image and the original.

2 个答案:

答案 0 :(得分:2)

用于提取ZIP文件的工具似乎将您的图像视为ASCII文本,将任何高于或等于0x80的值替换为未知字符,将其替换为问号(0x3F)。

答案 1 :(得分:0)

  

为什么图像被破坏的任何想法?

这取决于IOUtils.toByteArray(is)的作用。