gzip有可能不压缩文件吗?在那种情况下会发生什么?存档是否仍包含DEFLATE流?我需要在我的程序中处理这个特殊情况。
答案 0 :(得分:3)
是的,如果文件不可压缩,例如,如果它已经被压缩,gzip将创建一个包含源数据的存储块,其中附加了一些标题和预告片。
如果需要,您可以制作自己的非压缩流。 RFC 1951第3.2.3和3.2.4节描述了它是如何完成的。
Deflate存储块基本上是一个字节,其值为0x00或0x01(BTYPE = 00和BFINAL = 0,1),然后是4个字节的LEN和NLEN,后跟实际数据。 LEN是数据字节数(2 ^ 16 = 64KB),NLEN是一个补码。如果您有超过64KB,则必须多次执行此操作。最后一个块应该将BFINAL位设置为1.
最后,您必须使用gzip头RFC 1952(假设它是GZIP流,否则检查RFC 1950 for ZLIB)来预先添加所有这些内容。标题包含文件名,时间戳等。您需要几个小时的工作时间 - 大部分时间都用于了解规范。