2017-07-14 40 views
4

我想在程序中下载一个gzip压缩的文件并解压缩它,但不是在解压缩之前等待其完全下载,而是在下载时解压缩它,即将其解压缩。这甚至可能,或者gzipped格式禁止在运行中进行这种解压缩。它可能解压缩一个gzip文件,因为它正在下载?

我当然能够使用Java的GZIPInputStream库在本地文件系统上逐个部分地解压文件,但在本地文件系统中,我显然拥有完整的gzip文件。但是,如果我没有提供完整的gzip文件,例如从互联网或云存储下载的情况下,这可能吗?

+2

是的,没关系。与其他大多数压缩格式一样,'gzip'完美流畅。 –

回答

1

由于您的URL连接是一个输入流,并且由于您创建了具有输入流的gzipinputstream,我认为这相当直接?

public static void main(String[] args) throws Exception { 
    URL someUrl = new URL("http://your.site.com/yourfile.gz"); 
    HttpURLConnection someConnection = (HttpUrlConnection) someUrl.openConnection(); 
    GZIPInputStream someStream = new GZIPInputStream(someConnection.getInputStream()); 
    FileOutputStream someOutputStream = new FileOutputStream("output.tar"); 
    byte[] results = new byte[1024]; 
    int count = someStream.read(results); 
    while (count != -1) { 
     byte[] result = Arrays.copyOf(results, count); 
     someOutputStream.write(result); 
     count = someStream.read(results); 
    } 
    someOutputStream.flush(); 
    someOutputStream.close(); 
    someStream.close(); 
} 
+0

令人惊叹。我会尝试这个解决方案。 – pythonic