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

发布于 2024-12-08 15:32:10 字数 892 浏览 2 评论 0原文

我正在用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();
}

知道图像损坏的原因吗?

这是损坏图像和原始图像之间的视觉二进制比较。

I'm generating a zip file in java containing a mix of text and image files, this works fine on one computer but on another my image files are corrupt (same java version and OS); the resulting file sizes are the same but the image will not open in an image editor/viewer, text files are fine.

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();
}

Any ideas why the images are getting corrupted?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

吃素的狼 2024-12-15 15:32:11

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

It seems the tool you use to extract your ZIP file treats your image as ASCII text, replacing any value higher than or equal to 0x80 as an unknown character, replacing it with a questionmark (0x3F).

心的位置 2024-12-15 15:32:11

您知道图像损坏的原因吗?

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

Any ideas why the images are getting corrupted?

That would depend on what IOUtils.toByteArray(is) does.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文