【问题标题】:How to set deflater to HUFFMAN_ONLY in GZIPOutputstream如何在 GZIPOutputstream 中将 deflater 设置为 HUFFMAN_ONLY
【发布时间】:2017-03-15 16:59:10
【问题描述】:

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

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.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;
}

【问题讨论】:

    标签: java gzip huffman-code deflate


    【解决方案1】:

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

    【讨论】:

    • 嗨,你能举个例子吗?我对此还是很陌生,我基本上将使用 gzip 来压缩 mqtt 消息有效负载。还是谢谢你的回复
    • 您可以阅读 RFC 1952 了解 gzip 标头和尾标的布局。它很容易生成。您可以只使用固定的 10 字节 gzip 标头,并计算未压缩长度和 CRC-32 来构建预告片。
    猜你喜欢
    • 2011-02-01
    • 2023-03-12
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    相关资源
    最近更新 更多