看java的java.util.zip里面gzip和deflate是分开的,也就是说各自压缩各自的,没有关联。
但是看网上对HTTP报文的压缩介绍,都是一块儿说的,gzip,deflate。。
这两个是一种压缩吗?能用一种算法解压和压缩吗?
之间是什么关系?我试了一下java里面的方法,这两种是没有办法互相解得。
那在web中,如果这两种都支持的话,网站会压缩哪一种?
谢谢啦~~

解决方案 »

  1.   

    gzip是一种数据格式,默认且目前仅使用deflate算法压缩data部分;
    deflate是一种压缩算法,是huffman编码的一种加强。deflate与gzip解压的代码几乎相同,可以合成一块代码。
    区别仅有:deflate使用inflateInit(),而gzip使用inflateInit2()进行初始化,比 inflateInit()多一个参数: -MAX_WBITS,表示处理raw deflate数据。因为gzip数据中的zlib压缩数据块没有zlib header的两个字节。使用inflateInit2时要求zlib库忽略zlib header。在zlib手册中要求windowBits为8..15,但是实际上其它范围的数据有特殊作用,见zlib.h中的注释,如负数表示raw deflate。 
    Apache的deflate变种可能也没有zlib header,需要添加假头后处理。即MS的错误deflate (raw deflate).zlib头第1字节一般是0x78, 第2字节与第一字节合起来的双字节应能被31整除,详见rfc1950。例如Firefox的zlib假头为0x7801,python zlib.compress()结果头部为0x789c。  
      

  2.   

    deflate 是最基础的算法,gzip 在 deflate 的 raw data 前增加了 10 个字节的 gzheader,尾部添加了 8 个字节的校验字节(可选 crc32 和 adler32) 和长度标识字节。
      

  3.   

    有点儿高深
    我现在用java.util.zip里面的deflate和inflate进行压缩和解压deflate格式
    用GZIPOutputStream和GZIPInputStream进行压缩和解压gzip格式这样可以吗??
      

  4.   

    想对http中的gzip,deflate格式进行压缩和解压,所以才有了这个问题,
    如果哪位知道如何对这两种压缩进行处理的包或者代码就更好啦。。谢谢~
      

  5.   

    刚才又试了一下,发现用deflate压缩后,用gzipinputstream进行解压时说not in gzip format