2015-08-19 2 views
6

Я пытаюсь получить zip-файл с сервера. Im используя HttpURLConnection, чтобы получить InputStream и это то, что у меня есть:Как распаковать файл из InputStream

myInputStream.toString().getBytes().toString() is equal to [[email protected] 

byte[] bytes = Base64.decode(myInputStream.toString(), Base64.DEFAULT); 
String string = new String(bytes, "UTF-8"); 
string == �&ܢ��z�m����y.... 

Я действительно пытался распаковать этот файл, но ничего не работает, и есть очень много вопросов, я должен использовать GZIPInputStream или ZipInputStream? Должен ли я сохранить этот поток в виде файла, или я могу работать на InputStream

Пожалуйста, помогите, мой босс получает нетерпеливой: O Я понятия не имею, что находится в этом файле я должен узнать :)

+1

Check [это] (http://stackoverflow.com/a/3223510/916225) для загрузки –

+0

записи этого почтового индекса файл на SDCard, а затем попытайтесь разархивировать его. Не забывайте давать разрешения на чтение и запись – AmniX

+0

Использование 'inputStream.toString()' конечно же не делает то, что вы думаете. Так же как 'java.io.File.toString()' не выводит ** содержимое ** файла как String, а что-то еще (путь к файлу), что бесполезно, если вас интересует контент , – GPI

ответ

-1

в основном путем установки inputStream должно быть GZIPInputStream должно быть в состоянии прочитать фактическое содержание. Кроме того, для простоты, используя IOUtils пакет из apache.commons делает вашу жизнь легкой

это работает для меня:

InputStream is ; //initialize you IS 
    is = new GZIPInputStream(is); 
    byte[] bytes = IOUtils.toByteArray(is); 
    String s = new String(bytes); 
    System.out.println(s); 
+1

Хотя этот код может решить проблему OP, несколько слов объяснения станут еще более полезными для будущих читателей. – Thom

+1

@ TheThom yeah ur right mate, извините, я был abit занят во время сообщения. Я редактировал свой пост. – nafas

-1

Обычно, нет существенной разницы между GZIPInputStream или ZipInputStream, так что, если вообще, как должны работать.

Далее необходимо определить, был ли закодированный поток Base64 закодирован, или какое-то кодированное содержимое Base64 было помещено в заархивированный поток - из того, что вы задали на свой вопрос, это, по-видимому, последний вариант.

Таким образом, вы должны попробовать

ZipInputStream zis = new ZipInputStream(myInputStream); 
ZipEntry ze = zis.getNextEntry(); 
InputStream is = zis.getInputStream(ze); 

и продолжить оттуда ...

+0

Мусор. Однажды это метод сжатия потока: другой - это система для сжатия набора файлов. – EJP

+0

@EJP: Даже если объявить что-то как мусор, будет оценена правильная формулировка: ONE - это метод сжатия потока (GZIPInputStream), другой - метод для СЖАТИЯ набора файлов (ZipInputStream). И еще некоторые подробности, почему ответ должен быть мусором, тоже было бы хорошо - и когда вы знаете лучше, почему вы не ответили на вопрос? – tquadrat

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