gzip静态压缩文件格式说明
例1:
“aaaaaaaaaaaaaaaaa” 共17个字符
LZ77编码:
a | a | a | a | a | a | a | a | a | a | a | a | a | a | a | a | a |
---|
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
- | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
a(L=16, D=1)
码流:字符、L,D按下文中的固定表获得
BFINAL | BTYPE | 字符a | L=16 | D=1 | 结束字节 |
---|
1 | 10* | 10010001 | 00010111 | 00000 | 00000000 |
注*:BTYPE需反向读,10→01(固定表)
按字节划分 | | | |
---|
11010010 | 00100010 | 11100000 | 00000000 |
逆序 | | | |
---|
01001011 | 01000100 | 00000111 | 00000000 |
4B | 44 | 07 | 00 |
二进制文件内容:
00000000h: 1F 8B 08 08 E1 5B 68 5F 04 00 61 2E 74 78 74 00 ; .?.醄h_…a.txt.
00000010h: 4B 44 07 00 70 4E C1 1E 11 00 00 00 ; KD…pN?..
内容 | 描述 |
---|
1F 8B | ID1 ID2 |
08 | CM |
08 | FLG |
E1 5B 68 5F | 修改时间UTC |
04 | XFL |
00 | OS |
61 2E 74 78 74 00 | 文件名 a.txt |
4B 44 07 00 | 压缩块 |
70 4E C1 1E | 原文CRC32=1E C1 4E 70 |
11 00 00 00 | 原文size=00 00 00 11= 17 |
字符literal与长度length共用一个码表:(0到287)
字符表:
序号 | Bits | 编码 |
---|
0到143 | 8 | 00110000到10111111 |
144到255 | 9 | 110010000到111111111 |
长度表:
序号 | Bits | 编码 |
---|
256到279 | 7 | 0000000到0010111 |
280到287 | 8 | 11000000到11000111 |
长度码扩展表:
序号 | 扩展位个数 | 表示长度值 | 编码 |
---|
257 | 0 | 3 | 0000001 |
258 | 0 | 4 | 0000010 |
259 | 0 | 5 | 0000011 |
260 | 0 | 6 | 0000100 |
261 | 0 | 7 | 0000101 |
262 | 0 | 8 | 0000110 |
263 | 0 | 9 | 0000111 |
264 | 0 | 10 | 0001000 |
265 | 1 | 11,12 | 0001001 + b |
266 | 1 | 13,14 | 0001010 + b |
267 | 1 | 15,16 | 0001011 + b |
268 | 1 | 17,18 | 0001100 + b |
269 | 2 | 19到22 | 0001101 + bb |
270 | 2 | 23到26 | 0001110 + bb |
271 | 2 | 27到30 | 0001111 + bb |
272 | 2 | 31到34 | 0010000 + bb |
273 | 3 | 35到42 | 0010001 + bbb |
274 | 3 | 43到50 | 0010010 + bbb |
275 | 3 | 51到58 | 0010011 + bbb |
276 | 3 | 59到66 | 0010100 + bbb |
277 | 4 | 67到82 | 0010101 + bbbb |
278 | 4 | 83到98 | 0010110 + bbbb |
279 | 4 | 99到114 | 0010111 + bbbb |
280 | 4 | 115到130 | 11000000 + bbbbb |
281 | 5 | 131到162 | 11000001 + bbbbb |
282 | 5 | 163到194 | 11000010 + bbbbb |
283 | 5 | 195到226 | 11000011 + bbbbb |
284 | 5 | 227到257 | 11000100 + bbbbb |
285 | 0 | 258 | 11000101 |
距离distance码表
序号 | 扩展位个数 | 表示长度值 | 编码 |
---|
0 | 0 | 1 | 00000 |
1 | 0 | 2 | 00001 |
2 | 0 | 3 | 00010 |
3 | 0 | 4 | 00011 |
4 | 1 | 5,6 | 00100+1b |
5 | 1 | 7,8 | 00101+1b |
6 | 2 | 9-12 | 00110+2b |
7 | 2 | 13-16 | 00111+2b |
8 | 3 | 17-24 | 01000+3b |
9 | 3 | 25-32 | 01001+3b |
10 | 4 | 33-48 | 01010+4b |
11 | 4 | 49-64 | 01011+4b |
12 | 5 | 65-96 | 01100+5b |
13 | 5 | 97-128 | 01101+5b |
14 | 6 | 129-192 | 01110+6b |
15 | 6 | 193-256 | 01111+6b |
16 | 7 | 257-384 | 10000+7b |
17 | 7 | 385-512 | 10001+7b |
18 | 8 | 513-768 | 10010+8b |
19 | 8 | 769-1024 | 10011+8b |
20 | 9 | 1025-1536 | 10100+9b |
21 | 9 | 1537-2048 | 10101+9b |
22 | 10 | 2049-3072 | 10110+10b |
23 | 10 | 3073-4096 | 10111+10b |
24 | 11 | 4097-6144 | 11000+11b |
25 | 11 | 6145-8192 | 11001+11b |
26 | 12 | 8193-12288 | 11010+12b |
27 | 12 | 12289-16384 | 11011+12b |
28 | 13 | 16385-24576 | 11100+13b |
29 | 13 | 24577-32768 | 11101+13b |
参考文档:GZIP压缩 详细介绍了完整的gzip格式和原理