2016-03-25 78 views
1

我一直在研究一個函數,它使用GZIP壓縮字節數組並通過屬於套接字的outputStream發送它。它下載的很好,但是當試圖在我的電腦上解壓時,它說文件已損壞。在java中使用GZIP壓縮字節數組

private void Zip(byte[] datatocompress) 
    { 
      ZipOutputStream zippoutstream = new ZipOutputStream(outputstream); 

      zippoutstream.putNextEntry(new ZipEntry("file.html")); 
      zippoutstream.write(datatocompress); 
      zippoutstream.closeEntry(); 
      zippoutstream.flush(); 
      zippoutstream.close(); 
    } 

不知道什麼崩潰。任何建議?

回答

1
public static byte[] gzip(byte[] val) throws IOException { 
    ByteArrayOutputStream bos = new ByteArrayOutputStream(val.length); 
    GZIPOutputStream gos = null; 
    try { 
    gos = new GZIPOutputStream(bos); 
    gos.write(val, 0, val.length); 
    gos.finish(); 
    gos.flush(); 
    bos.flush(); 
    val = bos.toByteArray(); 
    } finally { 
    if (gos != null) 
    gos.close(); 
    if (bos != null) 
    bos.close(); 
    } 
    return val; 
} 

/** 
    * Compress 
    * 
    * @param source 
    * 
    * @param target 
    *   
    * @throws IOException 
    */ 
public static void zipFile(String source, String target) throws IOException { 
    FileInputStream fin = null; 
    FileOutputStream fout = null; 
    GZIPOutputStream gzout = null; 
    try { 
    fin = new FileInputStream(source); 
    fout = new FileOutputStream(target); 
    gzout = new GZIPOutputStream(fout); 
    byte[] buf = new byte[1024]; 
    int num; 
    while ((num = fin.read(buf)) != -1) { 
    gzout.write(buf, 0, num); 
    } 
    } finally { 
    if (gzout != null) 
    gzout.close(); 
    if (fout != null) 
    fout.close(); 
    if (fin != null) 
    fin.close(); 
    } 
}