2015-08-19 31 views
6

我試圖從服務器獲取zip文件。使用 林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

檢查[這](http://stackoverflow.com/a/3223510/916225)下載 –

+0

寫這個zip文件到SD卡,然後嘗試解壓縮。不要忘記授予讀寫權限 – AmniX

+0

inputStream.toString()的使用當然不會做你認爲它的作用。就像'java.io.File.toString()'不會將文件的**內容**打印爲字符串,而是打印其他文件(文件的路徑),如果您對內容感興趣。 – GPI

回答

-1

基本上通過設置inputStreamGZIPInputStream應該能夠讀取實際內容。 也是使用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是你的右伴侶,對不起,在帖子發佈的時候我很忙。我已經編輯了我的文章。 – 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