2013-09-07 2 views
1

Мне нужно создать файл почтового индекса, и я ограничен следующими условиями:Запись байт массива ZipArchiveOutputStream

  • Записи приходят как байт [] (или ByteArrayOutputStream), а не файл.
  • Имена файлов для записи могут быть не-ascii/UTF-8.
  • JDK 1.6 или более ранней версии

Поскольку java.util.zip поддерживает только UTF-8 имен файлов из JDK 1.7 и далее, по-видимому, лучше использовать обыкновенные сжать ZipArchiveOutputStream. Но как создать ZipEntryArchive на основе байтового массива или ByteArrayOutputStream, а не файла?

Спасибо!

+0

Что вы подразумеваете под «не-UTF-8» - любой символ Юникода может быть закодирован с использованием UTF-8. – Jesper

+0

@ Jesper Я имел в виду «не-ascii», UTF-8, не латинский ... – bz3x

ответ

6

Следующий метод принимает байтовый вход [] в качестве ввода, создает zip и возвращает его содержимое в качестве другого байта []. Все сделано в памяти. На диске нет операций ввода-вывода. Я удалил обработку исключений для лучшего обзора.

byte[] zip(byte[] data, String filename) { 
     ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
     ZipArchiveOutputStream zos = new ZipArchiveOutputStream(bos); 

     ZipArchiveEntry entry = new ZipArchiveEntry(filename); 
     entry.setSize(data.length); 
     zos.putArchiveEntry(entry); 
     zos.write(data); 
     zos.closeArchiveEntry(); 

     zos.close(); 
     bos.close(); 

     return bos.toByteArray();  
    } 

Это решение проблемы?

+0

Работает как очарование, спасибо! – bz3x

Смежные вопросы