Запись в центральном каталоге не найдена (ZipException)

Я пытаюсь загрузить zip-файл на SD-карту. Я загружаю его правильно, но когда я открываю загруженный файл (с помощью ZipFile), я получаю это ZipException («Запись в центральном каталоге не найдена»).

Интернет-файл в порядке, SD-копия-файл в порядке (с ПК открываются и показывают файлы правильно), но почему-то не работают в Android.

Код для скачивания:

BufferedInputStream stream = null;
try {
  stream = new BufferedInputStream(is, 8192);
}
....

try { ByteArrayBuffer baf = new ByteArrayBuffer(50); int current = 0; while ((current = stream.read()) != -1 ) baf.append((byte) current);

BufferedOutputStream fos = new BufferedOutputStream(new FileOutputStream(path)); fos.write(baf.toByteArray()); fos.close(); } ...

Я предположил, что проблема в заголовках ZIP-файлов, которые были неправильно прописаны, но не знаю по какой причине. Исходный код класса ZipEntry показывает мне следующее:

long sig = (hdrBuf[0] & 0xff) | ((hdrBuf[1] & 0xff) < <  8) |
           ((hdrBuf[2] & 0xff) < <  16) | ((hdrBuf[3] < <  24) & 0xffffffffL);
if (sig != CENSIG) {
     throw new ZipException("Central Directory Entry not found");
}

Спасибо,


person Manz    schedule 10.12.2010    source источник


Ответы (1)


Автоответ: проблема заключалась в том, что HTTP-запрос использует Accept-Encoding: gzip.

Сервер вернул уже сжатый файл и скачал его, распаковал, удалив часть заголовка.

К сожалению, 7zip открыл правильно (вероятно, не проверил заголовки), а Android не открыл файл (вероятно, проверил заголовки).

Короче: будьте осторожны и проверяйте правильность кодировки некоторых файлов.

person Manz    schedule 14.12.2010