2012-02-10 91 views
0

我有一個應用程序,其中服務A將向服務B提供壓縮數據。服務B需要將其解壓縮。解壓縮文件的內容

服務A有一個公開方法getStream,它將ByteArrayInputStream作爲輸出,數據init是壓縮數據。

但是,將該值傳遞給GzipInputStream會導致Gzip格式異常。

InputStream ins = method.getInputStream(); 
GZIPInputStream gis = new GZIPInputStream(ins); 

這給出了一個例外。當文件被轉儲到服務A時,數據被壓縮。所以getInputStream給出了壓縮數據。

如何處理它並將其傳遞給GzipInputStream?

問候
Dheeraj喬希

回答

1

如果拉上,則必須使用ZipInputstream

1

它取決於「zip」格式。有多種格式具有zip名稱(zip,gzip,bzip2,lzip),不同的格式需要不同的解析器。
http://en.wikipedia.org/wiki/List_of_archive_formats
http://www.codeguru.com/java/tij/tij0115.shtml
http://docstore.mik.ua/orelly/java-ent/jnut/ch25_01.htm

如果您使用的拉鍊那就試試這個代碼:

public void doUnzip(InputStream is, String destinationDirectory) throws IOException { 
    int BUFFER = 2048; 

    // make destination folder 
    File unzipDestinationDirectory = new File(destinationDirectory); 
    unzipDestinationDirectory.mkdir(); 

    ZipInputStream zis = new ZipInputStream(is); 

    // Process each entry 
    for (ZipEntry entry = zis.getNextEntry(); entry != null; entry = zis 
      .getNextEntry()) { 

     File destFile = new File(unzipDestinationDirectory, entry.getName()); 

     // create the parent directory structure if needed 
     destFile.getParentFile().mkdirs(); 

     try { 
      // extract file if not a directory 
      if (!entry.isDirectory()) { 
       // establish buffer for writing file 
       byte data[] = new byte[BUFFER]; 

       // write the current file to disk 
       FileOutputStream fos = new FileOutputStream(destFile); 
       BufferedOutputStream dest = new BufferedOutputStream(fos, 
         BUFFER); 

       // read and write until last byte is encountered 
       for (int bytesRead; (bytesRead = zis.read(data, 0, BUFFER)) != -1;) { 
        dest.write(data, 0, bytesRead); 
       } 
       dest.flush(); 
       dest.close(); 
      } 
     } catch (IOException ioe) { 
      ioe.printStackTrace(); 
     } 
    } 
    is.close(); 
} 

public static void main(String[] args) { 
    UnzipInputStream unzip = new UnzipInputStream(); 
    try { 
     InputStream fis = new FileInputStream(new File("test.zip")); 
     unzip.doUnzip(fis, "output"); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+0

文件內容是使用GZipOutputStream – 2012-02-10 08:46:40

+0

拉上你確定文件沒有損壞?然後嘗試在本地保存文件,並使用外部應用程序查看是否可以將其解壓縮。如果可以的話,這是代碼中的問題。如果不是,則文件已損壞,或者是另一種格式 – 2012-02-10 09:08:43