如何在GZIPOutputstream中将deflater设置为HUFFMAN_ONLY

时间:2017-03-15 16:59:11

标签: java gzip huffman-code deflate

您好我想知道是否可以将gzip输出流中使用的deflater设置为使用HUFFMAN_ONLY,我使用自己的deflate方法。

public static byte[] deflate(byte[] data) throws IOException {  
   Deflater deflater = new Deflater();  
   deflater.setInput(data);  
   ByteArrayOutputStream outputStream = new ByteArrayOutputStream(data.length);   
   deflater.finish();
   deflater.setLevel(Deflater.BEST_COMPRESSION); //*****THESE 2 LINES HERE
   deflater.setStrategy(Deflater.HUFFMAN_ONLY); // *******
   byte[] buffer = new byte[1024];   
   while (!deflater.finished()) {  
    int count = deflater.deflate(buffer); // returns the generated code... index  
    outputStream.write(buffer, 0, count);   
   }  
   outputStream.close();  
   byte[] output = outputStream.toByteArray();  
   return output;  
  }  

所以基本上我想知道当我使用这些线时,如何将我的gzip方法中使用的deflater设置为与上面的deflater相同:

   deflater.setLevel(Deflater.BEST_COMPRESSION);
   deflater.setStrategy(Deflater.HUFFMAN_ONLY);

这是我的gzip方法:

//GZIP Compression method
public static byte[] compress(String data) throws IOException {
    ByteArrayOutputStream bos = new ByteArrayOutputStream(data.length());
    GZIPOutputStream gzip = new GZIPOutputStream(bos);
    gzip.write(data.getBytes());
    gzip.close();
    byte[] compressed = bos.toByteArray();
    bos.close();
    return compressed;
}

1 个答案:

答案 0 :(得分:0)

不,但您可以使用Deflater设置为true的nowrap,并编写自己的gzip标头和预告片。