2016-03-25 21 views
1

私はGZIPを使用してバイトの配列を圧縮し、ソケットに属するoutputStreamを通して送る関数を開発してきました。それは正常にダウンロードしますが、私のPC上で解凍しようとすると、ファイルが壊れていると言います。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(); 
    } 
}