Как преобразовать массив байтов в ZIP-файл

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

byte[] originalContentBytes= new Verification().readBytesFromAFile(new File("E://file.zip"));

private byte[] readBytesFromAFile(File file) {
    int start = 0;
    int length = 1024;
    int offset = -1;
    byte[] buffer = new byte[length];
    try {
        //convert the file content into a byte array
        FileInputStream fileInuptStream = new FileInputStream(file);
        BufferedInputStream bufferedInputStream = new BufferedInputStream(
                fileInuptStream);
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

        while ((offset = bufferedInputStream.read(buffer, start, length)) != -1) {
            byteArrayOutputStream.write(buffer, start, offset);
        }

        bufferedInputStream.close();
        byteArrayOutputStream.flush();
        buffer = byteArrayOutputStream.toByteArray();
        byteArrayOutputStream.close();
    } catch (FileNotFoundException fileNotFoundException) {
        fileNotFoundException.printStackTrace();
    } catch (IOException ioException) {
        ioException.printStackTrace();
    }

    return buffer;
}

Но теперь моя проблема заключается в преобразовании массива байтов обратно в ZIP-файл - как это сделать?

Примечание. Указанный ZIP-файл содержит два файла.


person Mohan    schedule 03.12.2011    source источник
comment
Что именно вы хотите? Вы хотите записать байты обратно на диск в zip-файл? Или вы хотите прочитать содержание? Байты, как вы их читаете, еще не декодированы.   -  person morja    schedule 03.12.2011
comment
@ morja -› да, я хочу записать байты обратно на диск в виде zip-файла.   -  person Mohan    schedule 03.12.2011
comment
Хорошо, но затем просто запишите байты обратно на диск с помощью FileOutputStream и назовите файл .zip. Разве вы не хотите записывать извлеченные файлы?   -  person morja    schedule 03.12.2011
comment
@morja -› да, я пытался использовать FileOutputStream, но не могу получить точный zip-файл.   -  person Mohan    schedule 03.12.2011
comment
Я до сих пор не совсем понимаю, что вы хотите сделать ... можете ли вы обновить свой вопрос и описать шаг за шагом или на примере, чего вы хотите достичь?   -  person morja    schedule 03.12.2011


Ответы (2)


Чтобы получить содержимое из байтов, вы можете использовать

ZipInputStream zipStream = new ZipInputStream(new ByteArrayInputStream(bytes));
ZipEntry entry = null;
while ((entry = zipStream.getNextEntry()) != null) {

    String entryName = entry.getName();

    FileOutputStream out = new FileOutputStream(entryName);

    byte[] byteBuff = new byte[4096];
    int bytesRead = 0;
    while ((bytesRead = zipStream.read(byteBuff)) != -1)
    {
        out.write(byteBuff, 0, bytesRead);
    }

    out.close();
    zipStream.closeEntry();
}
zipStream.close(); 
person morja    schedule 03.12.2011
comment
да, это помогает мне получить имя записи, которое присутствует внутри zip-файла. Используя это, мы можем только читать содержимое. но как мы можем сохранить его на диск. - person Mohan; 03.12.2011
comment
Вы можете прочитать байты из zipStream, а затем записать их с помощью FileOutputStream. Или прямо написать еще раз. Смотрите мое обновление. - person morja; 03.12.2011

Вероятно, вы ищете такой код:

ZipInputStream z = new ZipInputStream(new ByteArrayInputStream(buffer))

теперь вы можете получить содержимое zip-файла через getNextEntry()

person Has QUIT--Anony-Mousse    schedule 03.12.2011