2015-08-19 27 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