Почему изображения в моем zip-файле повреждены? - PullRequest
0 голосов
/ 07 октября 2011

Я создаю zip-файл в java, содержащий смесь текстовых и графических файлов, это отлично работает на одном компьютере, но на другом мои файлы изображений повреждены (та же версия 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();
}

Есть идеи, почему изображения портятся?

Вот визуальное двоичное сравнение поврежденного изображения с оригиналом.

Ответы [ 2 ]

2 голосов
/ 07 октября 2011

Похоже, что инструмент, который вы используете для извлечения ZIP-файла, обрабатывает ваше изображение как текст ASCII, заменяя любое значение, большее или равное 0x80, как неизвестный символ, заменяя его вопросительным знаком (0x3F).

0 голосов
/ 07 октября 2011

Любые идеи, почему изображения становятся поврежденными?

Это будет зависеть от того, что делает IOUtils.toByteArray(is).

...