Разархивация файла от InputStream и возврат другого InputStream

Я пытаюсь записать функцию, которая примет InputStream с заархивированными данными файла и возвратил бы другого InputStream с разархивированными данными.

Заархивированный файл будет только содержать единственный файл и таким образом нет никакого требования создания каталогов и т.д...

Я пытался смотреть на ZipInputStream и другие, но я смущен таким количеством различных типов потоков в Java.

28
задан Baishampayan Ghose 9 March 2013 в 02:45
поделиться

3 ответа

Концепции

GZIPINPUTSTREAM предназначены для потоков (или файлов), нажимых как GZIP («.gz» расширение). У него нет информации заголовка.

GZIPINPUTSTREAM предназначен для [ZAPTATATA]

Если у вас есть настоящий zip-файл, вам нужно пользовательский zipfile, чтобы открыть файл, попросить список файлов (один в своем примере) и попросить распакованный входной поток.

ZIPFile для файла с [Информацией заголовка + ZaincData]

Ваш метод, если у вас есть файл, было бы что-то вроде:

// ITS PSEUDOCODE!!

private InputStream extractOnlyFile(String path) {
   ZipFile zf = new ZipFile(path);
   Enumeration e = zf.entries();
   ZipEntry entry = (ZipEntry) e.nextElement(); // your only file
   return zf.getInputStream(entry);
}

чтение ввода с содержимым файла .zip

Если у вас есть входной потерю, вы можете использовать (как @Cletus говорит) zipinputStream. Он читает поток, включающий данные заголовка.

ZIPINPUTSTREAM предназначен для потока с [Информация о заголовке + ZippedData]

Важно: если у вас есть файл на вашем компьютере, вы можете использовать ZipFile класс для доступа к нему случайным образом

Это образец Чтение zip-файла через входную систему:

import java.io.FileInputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;


public class Main {
    public static void main(String[] args) throws Exception
    {
        FileInputStream fis = new FileInputStream("c:/inas400.zip");

        // this is where you start, with an InputStream containing the bytes from the zip file
        ZipInputStream zis = new ZipInputStream(fis);
        ZipEntry entry;
            // while there are entries I process them
        while ((entry = zis.getNextEntry()) != null)
        {
            System.out.println("entry: " + entry.getName() + ", " + entry.getSize());
                    // consume all the data from this entry
            while (zis.available() > 0)
                zis.read();
                    // I could close the entry, but getNextEntry does it automatically
                    // zis.closeEntry()
        }
    }
}
46
ответ дан 28 November 2019 в 03:01
поделиться

Если вы можете изменить данные ввода, я бы предложил вам использовать gzipinputStream .

GZIPINPUTSTREAM отличается от ZipinputStream , поскольку у вас есть только один данные внутри него. Таким образом, весь входной поток представляет весь файл. В ZipinputStream Весь поток содержит также структуру файла внутри него, что может быть много.

6
ответ дан 28 November 2019 в 03:01
поделиться
- [11258935-

Если я чего-то не хватает, вы должны абсолютно попробовать и получить zipinputStream на работу, и нет причин. ).

Что вы должны сделать, это попробовать и получить ZipinputStream для работы, и если вы не можете, опубликовать код, и мы поможем вам с любыми проблемами, которые у вас есть.

Что бы вы ни делали, не пытайтесь изобретать его функциональность.

2
ответ дан 28 November 2019 в 03:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: