2016-03-25 17 views
1

arasındaki bayt dizilerinin sıkıştırılması GZIP kullanarak bir bayt dizisini sıkıştıran ve bir sokete ait bir outputStream üzerinden gönderen bir işlev üzerinde çalışıyorum. İyi indirir ama PC'mde sıkıştırmaya çalışırken dosya bozuk olduğunu söylüyor.GZIP kullanılarak java

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(); 
    } 

Hangi kilitlenme hakkında bir fikir yok. Herhangi bir öneri?

cevap

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(); 
    } 
}