@@ -1,972 +0,0 @@
1 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
2 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
3 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
5 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
6 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
7 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Network Working Group P. Deutsch
8 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Request for Comments: 1951 Aladdin Enterprises
9 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Category: Informational May 1996
10 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
11 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
12 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- DEFLATE Compressed Data Format Specification version 1.3
13 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
14 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Status of This Memo
15 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
16 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- This memo provides information for the Internet community. This memo
17 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- does not specify an Internet standard of any kind. Distribution of
18 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- this memo is unlimited.
19 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
20 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- IESG Note:
21 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
22 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- The IESG takes no position on the validity of any Intellectual
23 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Property Rights statements contained in this document.
24 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
25 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Notices
26 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
27 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Copyright (c) 1996 L. Peter Deutsch
28 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
29 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Permission is granted to copy and distribute this document for any
30 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- purpose and without charge, including translations into other
31 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- languages and incorporation into compilations, provided that the
32 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- copyright notice and this notice are preserved, and that any
33 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- substantive changes or deletions from the original are clearly
34 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- marked.
35 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
36 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- A pointer to the latest version of this and related documentation in
37 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- HTML format can be found at the URL
38 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- <ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html>.
39 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
40 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Abstract
41 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
42 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- This specification defines a lossless compressed data format that
43 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- compresses data using a combination of the LZ77 algorithm and Huffman
44 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- coding, with efficiency comparable to the best currently available
45 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- general-purpose compression methods. The data can be produced or
46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- consumed, even for an arbitrarily long sequentially presented input
47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- data stream, using only an a priori bounded amount of intermediate
48 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- storage. The format can be implemented readily in a manner not
49 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- covered by patents.
50 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
51 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
52 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
53 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
54 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
55 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
56 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
57 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
58 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Deutsch Informational [Page 1]
59 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
60 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
61 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- RFC 1951 DEFLATE Compressed Data Format Specification May 1996
62 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
63 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
64 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Table of Contents
65 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
66 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 1. Introduction ................................................... 2
67 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 1.1. Purpose ................................................... 2
68 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 1.2. Intended audience ......................................... 3
69 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 1.3. Scope ..................................................... 3
70 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 1.4. Compliance ................................................ 3
71 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 1.5. Definitions of terms and conventions used ................ 3
72 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 1.6. Changes from previous versions ............................ 4
73 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 2. Compressed representation overview ............................. 4
74 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 3. Detailed specification ......................................... 5
75 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 3.1. Overall conventions ....................................... 5
76 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 3.1.1. Packing into bytes .................................. 5
77 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 3.2. Compressed block format ................................... 6
78 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 3.2.1. Synopsis of prefix and Huffman coding ............... 6
79 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 3.2.2. Use of Huffman coding in the "deflate" format ....... 7
80 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 3.2.3. Details of block format ............................. 9
81 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 3.2.4. Non-compressed blocks (BTYPE=00) ................... 11
82 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 3.2.5. Compressed blocks (length and distance codes) ...... 11
83 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 3.2.6. Compression with fixed Huffman codes (BTYPE=01) .... 12
84 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 3.2.7. Compression with dynamic Huffman codes (BTYPE=10) .. 13
85 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 3.3. Compliance ............................................... 14
86 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 4. Compression algorithm details ................................. 14
87 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 5. References .................................................... 16
88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 6. Security Considerations ....................................... 16
89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 7. Source code ................................................... 16
90 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 8. Acknowledgements .............................................. 16
91 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 9. Author's Address .............................................. 17
92 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
93 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 1. Introduction
94 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
95 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 1.1. Purpose
96 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
97 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- The purpose of this specification is to define a lossless
98 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- compressed data format that:
99 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- * Is independent of CPU type, operating system, file system,
100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- and character set, and hence can be used for interchange;
101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- * Can be produced or consumed, even for an arbitrarily long
102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sequentially presented input data stream, using only an a
103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- priori bounded amount of intermediate storage, and hence
104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- can be used in data communications or similar structures
105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- such as Unix filters;
106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- * Compresses data with efficiency comparable to the best
107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- currently available general-purpose compression methods,
108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- and in particular considerably better than the "compress"
109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- program;
110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- * Can be implemented readily in a manner not covered by
111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- patents, and hence can be practiced freely;
112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Deutsch Informational [Page 2]
116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- RFC 1951 DEFLATE Compressed Data Format Specification May 1996
119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- * Is compatible with the file format produced by the current
122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- widely used gzip utility, in that conforming decompressors
123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- will be able to read data produced by the existing gzip
124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- compressor.
125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- The data format defined by this specification does not attempt to:
127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- * Allow random access to compressed data;
129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- * Compress specialized data (e.g., raster graphics) as well
130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- as the best currently available specialized algorithms.
131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- A simple counting argument shows that no lossless compression
133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- algorithm can compress every possible input data set. For the
134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- format defined here, the worst case expansion is 5 bytes per 32K-
135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- byte block, i.e., a size increase of 0.015% for large data sets.
136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- English text usually compresses by a factor of 2.5 to 3;
137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- executable files usually compress somewhat less; graphical data
138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- such as raster images may compress much more.
139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 1.2. Intended audience
141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- This specification is intended for use by implementors of software
143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- to compress data into "deflate" format and/or decompress data from
144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "deflate" format.
145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- The text of the specification assumes a basic background in
147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- programming at the level of bits and other primitive data
148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- representations. Familiarity with the technique of Huffman coding
149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- is helpful but not required.
150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 1.3. Scope
152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- The specification specifies a method for representing a sequence
154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- of bytes as a (usually shorter) sequence of bits, and a method for
155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- packing the latter bit sequence into bytes.
156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 1.4. Compliance
158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Unless otherwise indicated below, a compliant decompressor must be
160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- able to accept and decompress any data set that conforms to all
161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- the specifications presented here; a compliant compressor must
162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- produce data sets that conform to all the specifications presented
163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- here.
164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 1.5. Definitions of terms and conventions used
166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Byte: 8 bits stored or transmitted as a unit (same as an octet).
168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- For this specification, a byte is exactly 8 bits, even on machines
169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Deutsch Informational [Page 3]
173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- RFC 1951 DEFLATE Compressed Data Format Specification May 1996
176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- which store a character on a number of bits different from eight.
179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- See below, for the numbering of bits within a byte.
180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- String: a sequence of arbitrary bytes.
182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 1.6. Changes from previous versions
184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- There have been no technical changes to the deflate format since
186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- version 1.1 of this specification. In version 1.2, some
187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- terminology was changed. Version 1.3 is a conversion of the
188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- specification to RFC style.
189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 2. Compressed representation overview
191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- A compressed data set consists of a series of blocks, corresponding
193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- to successive blocks of input data. The block sizes are arbitrary,
194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- except that non-compressible blocks are limited to 65,535 bytes.
195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Each block is compressed using a combination of the LZ77 algorithm
197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- and Huffman coding. The Huffman trees for each block are independent
198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- of those for previous or subsequent blocks; the LZ77 algorithm may
199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- use a reference to a duplicated string occurring in a previous block,
200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- up to 32K input bytes before.
201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Each block consists of two parts: a pair of Huffman code trees that
203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- describe the representation of the compressed data part, and a
204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- compressed data part. (The Huffman trees themselves are compressed
205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- using Huffman encoding.) The compressed data consists of a series of
206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- elements of two types: literal bytes (of strings that have not been
207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- detected as duplicated within the previous 32K input bytes), and
208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pointers to duplicated strings, where a pointer is represented as a
209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pair <length, backward distance>. The representation used in the
210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "deflate" format limits distances to 32K bytes and lengths to 258
211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- bytes, but does not limit the size of a block, except for
212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- uncompressible blocks, which are limited as noted above.
213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Each type of value (literals, distances, and lengths) in the
215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- compressed data is represented using a Huffman code, using one code
216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tree for literals and lengths and a separate code tree for distances.
217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- The code trees for each block appear in a compact form just before
218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- the compressed data for that block.
219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Deutsch Informational [Page 4]
230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- RFC 1951 DEFLATE Compressed Data Format Specification May 1996
233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 3. Detailed specification
236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 3.1. Overall conventions In the diagrams below, a box like this:
238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- +---+
240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- | | <-- the vertical bars might be missing
241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- +---+
242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- represents one byte; a box like this:
244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- +==============+
246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- | |
247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- +==============+
248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- represents a variable number of bytes.
250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Bytes stored within a computer do not have a "bit order", since
252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- they are always treated as a unit. However, a byte considered as
253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- an integer between 0 and 255 does have a most- and least-
254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- significant bit, and since we write numbers with the most-
255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- significant digit on the left, we also write bytes with the most-
256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- significant bit on the left. In the diagrams below, we number the
257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- bits of a byte so that bit 0 is the least-significant bit, i.e.,
258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- the bits are numbered:
259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- +--------+
261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- |76543210|
262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- +--------+
263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Within a computer, a number may occupy multiple bytes. All
265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- multi-byte numbers in the format described here are stored with
266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- the least-significant byte first (at the lower memory address).
267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- For example, the decimal number 520 is stored as:
268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 0 1
270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- +--------+--------+
271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- |00001000|00000010|
272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- +--------+--------+
273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ^ ^
274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- | |
275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- | + more significant byte = 2 x 256
276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- + less significant byte = 8
277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 3.1.1. Packing into bytes
279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- This document does not address the issue of the order in which
281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- bits of a byte are transmitted on a bit-sequential medium,
282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- since the final data format described here is byte- rather than
283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Deutsch Informational [Page 5]
287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- RFC 1951 DEFLATE Compressed Data Format Specification May 1996
290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- bit-oriented. However, we describe the compressed block format
293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- in below, as a sequence of data elements of various bit
294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- lengths, not a sequence of bytes. We must therefore specify
295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- how to pack these data elements into bytes to form the final
296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- compressed byte sequence:
297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- * Data elements are packed into bytes in order of
299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- increasing bit number within the byte, i.e., starting
300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- with the least-significant bit of the byte.
301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- * Data elements other than Huffman codes are packed
302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- starting with the least-significant bit of the data
303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- element.
304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- * Huffman codes are packed starting with the most-
305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- significant bit of the code.
306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- In other words, if one were to print out the compressed data as
308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- a sequence of bytes, starting with the first byte at the
309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *right* margin and proceeding to the *left*, with the most-
310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- significant bit of each byte on the left as usual, one would be
311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- able to parse the result from right to left, with fixed-width
312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- elements in the correct MSB-to-LSB order and Huffman codes in
313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- bit-reversed order (i.e., with the first bit of the code in the
314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- relative LSB position).
315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 3.2. Compressed block format
317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 3.2.1. Synopsis of prefix and Huffman coding
319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Prefix coding represents symbols from an a priori known
321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- alphabet by bit sequences (codes), one code for each symbol, in
322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- a manner such that different symbols may be represented by bit
323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sequences of different lengths, but a parser can always parse
324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- an encoded string unambiguously symbol-by-symbol.
325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- We define a prefix code in terms of a binary tree in which the
327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- two edges descending from each non-leaf node are labeled 0 and
328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 1 and in which the leaf nodes correspond one-for-one with (are
329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- labeled with) the symbols of the alphabet; then the code for a
330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- symbol is the sequence of 0's and 1's on the edges leading from
331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- the root to the leaf labeled with that symbol. For example:
332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Deutsch Informational [Page 6]
344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- RFC 1951 DEFLATE Compressed Data Format Specification May 1996
347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /\ Symbol Code
350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 0 1 ------ ----
351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- / \ A 00
352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /\ B B 1
353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 0 1 C 011
354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- / \ D 010
355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- A /\
356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 0 1
357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- / \
358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- D C
359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- A parser can decode the next symbol from an encoded input
361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- stream by walking down the tree from the root, at each step
362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- choosing the edge corresponding to the next input bit.
363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Given an alphabet with known symbol frequencies, the Huffman
365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- algorithm allows the construction of an optimal prefix code
366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (one which represents strings with those symbol frequencies
367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- using the fewest bits of any possible prefix codes for that
368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- alphabet). Such a code is called a Huffman code. (See
369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- reference [1] in Chapter 5, references for additional
370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- information on Huffman codes.)
371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Note that in the "deflate" format, the Huffman codes for the
373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- various alphabets must not exceed certain maximum code lengths.
374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- This constraint complicates the algorithm for computing code
375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- lengths from symbol frequencies. Again, see Chapter 5,
376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- references for details.
377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 3.2.2. Use of Huffman coding in the "deflate" format
379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- The Huffman codes used for each alphabet in the "deflate"
381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- format have two additional rules:
382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- * All codes of a given bit length have lexicographically
384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- consecutive values, in the same order as the symbols
385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- they represent;
386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- * Shorter codes lexicographically precede longer codes.
388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Deutsch Informational [Page 7]
401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- RFC 1951 DEFLATE Compressed Data Format Specification May 1996
404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- We could recode the example above to follow this rule as
407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- follows, assuming that the order of the alphabet is ABCD:
408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Symbol Code
410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ------ ----
411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- A 10
412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- B 0
413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- C 110
414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- D 111
415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- I.e., 0 precedes 10 which precedes 11x, and 110 and 111 are
417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- lexicographically consecutive.
418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Given this rule, we can define the Huffman code for an alphabet
420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- just by giving the bit lengths of the codes for each symbol of
421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- the alphabet in order; this is sufficient to determine the
422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- actual codes. In our example, the code is completely defined
423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- by the sequence of bit lengths (2, 1, 3, 3). The following
424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- algorithm generates the codes as integers, intended to be read
425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- from most- to least-significant bit. The code lengths are
426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- initially in tree[I].Len; the codes are produced in
427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tree[I].Code.
428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 1) Count the number of codes for each code length. Let
430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- bl_count[N] be the number of codes of length N, N >= 1.
431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 2) Find the numerical value of the smallest code for each
433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- code length:
434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- code = 0;
436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- bl_count[0] = 0;
437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for (bits = 1; bits <= MAX_BITS; bits++) {
438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- code = (code + bl_count[bits-1]) << 1;
439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- next_code[bits] = code;
440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 3) Assign numerical values to all codes, using consecutive
443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- values for all codes of the same length with the base
444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- values determined at step 2. Codes that are never used
445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (which have a bit length of zero) must not be assigned a
446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- value.
447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for (n = 0; n <= max_code; n++) {
449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- len = tree[n].Len;
450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if (len != 0) {
451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tree[n].Code = next_code[len];
452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- next_code[len]++;
453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Deutsch Informational [Page 8]
458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- RFC 1951 DEFLATE Compressed Data Format Specification May 1996
461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Example:
466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Consider the alphabet ABCDEFGH, with bit lengths (3, 3, 3, 3,
468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 3, 2, 4, 4). After step 1, we have:
469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- N bl_count[N]
471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- - -----------
472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 2 1
473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 3 5
474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 4 2
475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Step 2 computes the following next_code values:
477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- N next_code[N]
479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- - ------------
480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 1 0
481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 2 0
482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 3 2
483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 4 14
484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Step 3 produces the following code values:
486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Symbol Length Code
488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ------ ------ ----
489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- A 3 010
490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- B 3 011
491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- C 3 100
492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- D 3 101
493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- E 3 110
494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- F 2 00
495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- G 4 1110
496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- H 4 1111
497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 3.2.3. Details of block format
499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Each block of compressed data begins with 3 header bits
501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- containing the following data:
502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- first bit BFINAL
504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- next 2 bits BTYPE
505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Note that the header bits do not necessarily begin on a byte
507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- boundary, since a block does not necessarily occupy an integral
508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- number of bytes.
509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Deutsch Informational [Page 9]
515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- RFC 1951 DEFLATE Compressed Data Format Specification May 1996
518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- BFINAL is set if and only if this is the last block of the data
521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- set.
522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- BTYPE specifies how the data are compressed, as follows:
524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 00 - no compression
526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 01 - compressed with fixed Huffman codes
527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 10 - compressed with dynamic Huffman codes
528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 11 - reserved (error)
529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- The only difference between the two compressed cases is how the
531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Huffman codes for the literal/length and distance alphabets are
532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- defined.
533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- In all cases, the decoding algorithm for the actual data is as
535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- follows:
536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- do
538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- read block header from input stream.
539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if stored with no compression
540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- skip any remaining bits in current partially
541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- processed byte
542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- read LEN and NLEN (see next section)
543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- copy LEN bytes of data to output
544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- otherwise
545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if compressed with dynamic Huffman codes
546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- read representation of code trees (see
547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- subsection below)
548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- loop (until end of block code recognized)
549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- decode literal/length value from input stream
550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if value < 256
551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- copy value (literal byte) to output stream
552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- otherwise
553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if value = end of block (256)
554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- break from loop
555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- otherwise (value = 257..285)
556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- decode distance from input stream
557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- move backwards distance bytes in the output
559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- stream, and copy length bytes from this
560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- position to the output stream.
561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- end loop
562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while not last block
563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Note that a duplicated string reference may refer to a string
565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- in a previous block; i.e., the backward distance may cross one
566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- or more block boundaries. However a distance cannot refer past
567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- the beginning of the output stream. (An application using a
568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Deutsch Informational [Page 10]
572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- RFC 1951 DEFLATE Compressed Data Format Specification May 1996
575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- preset dictionary might discard part of the output stream; a
578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- distance can refer to that part of the output stream anyway)
579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Note also that the referenced string may overlap the current
580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- position; for example, if the last 2 bytes decoded have values
581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- X and Y, a string reference with <length = 5, distance = 2>
582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- adds X,Y,X,Y,X to the output stream.
583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- We now specify each compression method in turn.
585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 3.2.4. Non-compressed blocks (BTYPE=00)
587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Any bits of input up to the next byte boundary are ignored.
589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- The rest of the block consists of the following information:
590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 0 1 2 3 4...
592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- +---+---+---+---+================================+
593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- | LEN | NLEN |... LEN bytes of literal data...|
594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- +---+---+---+---+================================+
595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- LEN is the number of data bytes in the block. NLEN is the
597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- one's complement of LEN.
598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 3.2.5. Compressed blocks (length and distance codes)
600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- As noted above, encoded data blocks in the "deflate" format
602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- consist of sequences of symbols drawn from three conceptually
603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- distinct alphabets: either literal bytes, from the alphabet of
604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- byte values (0..255), or <length, backward distance> pairs,
605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- where the length is drawn from (3..258) and the distance is
606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- drawn from (1..32,768). In fact, the literal and length
607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- alphabets are merged into a single alphabet (0..285), where
608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- values 0..255 represent literal bytes, the value 256 indicates
609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- end-of-block, and values 257..285 represent length codes
610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (possibly in conjunction with extra bits following the symbol
611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- code) as follows:
612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Deutsch Informational [Page 11]
629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- RFC 1951 DEFLATE Compressed Data Format Specification May 1996
632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Extra Extra Extra
635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Code Bits Length(s) Code Bits Lengths Code Bits Length(s)
636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ---- ---- ------ ---- ---- ------- ---- ---- -------
637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 257 0 3 267 1 15,16 277 4 67-82
638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 258 0 4 268 1 17,18 278 4 83-98
639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 259 0 5 269 2 19-22 279 4 99-114
640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 260 0 6 270 2 23-26 280 4 115-130
641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 261 0 7 271 2 27-30 281 5 131-162
642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 262 0 8 272 2 31-34 282 5 163-194
643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 263 0 9 273 3 35-42 283 5 195-226
644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 264 0 10 274 3 43-50 284 5 227-257
645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 265 1 11,12 275 3 51-58 285 0 258
646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 266 1 13,14 276 3 59-66
647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- The extra bits should be interpreted as a machine integer
649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- stored with the most-significant bit first, e.g., bits 1110
650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- represent the value 14.
651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Extra Extra Extra
653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Code Bits Dist Code Bits Dist Code Bits Distance
654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ---- ---- ---- ---- ---- ------ ---- ---- --------
655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 0 0 1 10 4 33-48 20 9 1025-1536
656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 1 0 2 11 4 49-64 21 9 1537-2048
657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 2 0 3 12 5 65-96 22 10 2049-3072
658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 3 0 4 13 5 97-128 23 10 3073-4096
659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 4 1 5,6 14 6 129-192 24 11 4097-6144
660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 5 1 7,8 15 6 193-256 25 11 6145-8192
661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 6 2 9-12 16 7 257-384 26 12 8193-12288
662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 7 2 13-16 17 7 385-512 27 12 12289-16384
663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 8 3 17-24 18 8 513-768 28 13 16385-24576
664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 9 3 25-32 19 8 769-1024 29 13 24577-32768
665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 3.2.6. Compression with fixed Huffman codes (BTYPE=01)
667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- The Huffman codes for the two alphabets are fixed, and are not
669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- represented explicitly in the data. The Huffman code lengths
670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for the literal/length alphabet are:
671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Lit Value Bits Codes
673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- --------- ---- -----
674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 0 - 143 8 00110000 through
675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 10111111
676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 144 - 255 9 110010000 through
677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 111111111
678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 256 - 279 7 0000000 through
679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 0010111
680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 280 - 287 8 11000000 through
681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 11000111
682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Deutsch Informational [Page 12]
686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- RFC 1951 DEFLATE Compressed Data Format Specification May 1996
689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- The code lengths are sufficient to generate the actual codes,
692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- as described above; we show the codes in the table for added
693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- clarity. Literal/length values 286-287 will never actually
694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- occur in the compressed data, but participate in the code
695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- construction.
696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Distance codes 0-31 are represented by (fixed-length) 5-bit
698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- codes, with possible additional bits as shown in the table
699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- shown in Paragraph 3.2.5, above. Note that distance codes 30-
700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 31 will never actually occur in the compressed data.
701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 3.2.7. Compression with dynamic Huffman codes (BTYPE=10)
703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- The Huffman codes for the two alphabets appear in the block
705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- immediately after the header bits and before the actual
706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- compressed data, first the literal/length code and then the
707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- distance code. Each code is defined by a sequence of code
708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- lengths, as discussed in Paragraph 3.2.2, above. For even
709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- greater compactness, the code length sequences themselves are
710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- compressed using a Huffman code. The alphabet for code lengths
711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- is as follows:
712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 0 - 15: Represent code lengths of 0 - 15
714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 16: Copy the previous code length 3 - 6 times.
715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- The next 2 bits indicate repeat length
716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (0 = 3, ... , 3 = 6)
717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Example: Codes 8, 16 (+2 bits 11),
718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 16 (+2 bits 10) will expand to
719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 12 code lengths of 8 (1 + 6 + 5)
720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 17: Repeat a code length of 0 for 3 - 10 times.
721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (3 bits of length)
722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 18: Repeat a code length of 0 for 11 - 138 times
723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (7 bits of length)
724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- A code length of 0 indicates that the corresponding symbol in
726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- the literal/length or distance alphabet will not occur in the
727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- block, and should not participate in the Huffman code
728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- construction algorithm given earlier. If only one distance
729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- code is used, it is encoded using one bit, not zero bits; in
730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- this case there is a single code length of one, with one unused
731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- code. One distance code of zero bits means that there are no
732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- distance codes used at all (the data is all literals).
733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- We can now define the format of the block:
735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 5 Bits: HLIT, # of Literal/Length codes - 257 (257 - 286)
737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 5 Bits: HDIST, # of Distance codes - 1 (1 - 32)
738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 4 Bits: HCLEN, # of Code Length codes - 4 (4 - 19)
739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Deutsch Informational [Page 13]
743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- RFC 1951 DEFLATE Compressed Data Format Specification May 1996
746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (HCLEN + 4) x 3 bits: code lengths for the code length
749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- alphabet given just above, in the order: 16, 17, 18,
750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15
751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- These code lengths are interpreted as 3-bit integers
753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (0-7); as above, a code length of 0 means the
754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- corresponding symbol (literal/length or distance code
755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- length) is not used.
756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- HLIT + 257 code lengths for the literal/length alphabet,
758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- encoded using the code length Huffman code
759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- HDIST + 1 code lengths for the distance alphabet,
761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- encoded using the code length Huffman code
762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- The actual compressed data of the block,
764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- encoded using the literal/length and distance Huffman
765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- codes
766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- The literal/length symbol 256 (end of data),
768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- encoded using the literal/length Huffman code
769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- The code length repeat codes can cross from HLIT + 257 to the
771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- HDIST + 1 code lengths. In other words, all code lengths form
772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- a single sequence of HLIT + HDIST + 258 values.
773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 3.3. Compliance
775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- A compressor may limit further the ranges of values specified in
777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- the previous section and still be compliant; for example, it may
778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- limit the range of backward pointers to some value smaller than
779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 32K. Similarly, a compressor may limit the size of blocks so that
780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- a compressible block fits in memory.
781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- A compliant decompressor must accept the full range of possible
783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- values defined in the previous section, and must accept blocks of
784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- arbitrary size.
785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 4. Compression algorithm details
787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- While it is the intent of this document to define the "deflate"
789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- compressed data format without reference to any particular
790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- compression algorithm, the format is related to the compressed
791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- formats produced by LZ77 (Lempel-Ziv 1977, see reference [2] below);
792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- since many variations of LZ77 are patented, it is strongly
793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- recommended that the implementor of a compressor follow the general
794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- algorithm presented here, which is known not to be patented per se.
795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- The material in this section is not part of the definition of the
796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Deutsch Informational [Page 14]
800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- RFC 1951 DEFLATE Compressed Data Format Specification May 1996
803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- specification per se, and a compressor need not follow it in order to
806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- be compliant.
807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- The compressor terminates a block when it determines that starting a
809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- new block with fresh trees would be useful, or when the block size
810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fills up the compressor's block buffer.
811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- The compressor uses a chained hash table to find duplicated strings,
813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- using a hash function that operates on 3-byte sequences. At any
814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- given point during compression, let XYZ be the next 3 input bytes to
815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- be examined (not necessarily all different, of course). First, the
816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- compressor examines the hash chain for XYZ. If the chain is empty,
817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- the compressor simply writes out X as a literal byte and advances one
818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- byte in the input. If the hash chain is not empty, indicating that
819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- the sequence XYZ (or, if we are unlucky, some other 3 bytes with the
820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- same hash function value) has occurred recently, the compressor
821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- compares all strings on the XYZ hash chain with the actual input data
822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sequence starting at the current point, and selects the longest
823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- match.
824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- The compressor searches the hash chains starting with the most recent
826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- strings, to favor small distances and thus take advantage of the
827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Huffman encoding. The hash chains are singly linked. There are no
828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- deletions from the hash chains; the algorithm simply discards matches
829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- that are too old. To avoid a worst-case situation, very long hash
830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- chains are arbitrarily truncated at a certain length, determined by a
831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- run-time parameter.
832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- To improve overall compression, the compressor optionally defers the
834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- selection of matches ("lazy matching"): after a match of length N has
835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- been found, the compressor searches for a longer match starting at
836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- the next input byte. If it finds a longer match, it truncates the
837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- previous match to a length of one (thus producing a single literal
838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- byte) and then emits the longer match. Otherwise, it emits the
839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- original match, and, as described above, advances N bytes before
840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- continuing.
841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Run-time parameters also control this "lazy match" procedure. If
843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- compression ratio is most important, the compressor attempts a
844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- complete second search regardless of the length of the first match.
845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- In the normal case, if the current match is "long enough", the
846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- compressor reduces the search for a longer match, thus speeding up
847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- the process. If speed is most important, the compressor inserts new
848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- strings in the hash table only when no match was found, or when the
849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- match is not "too long". This degrades the compression ratio but
850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- saves time since there are both fewer insertions and fewer searches.
851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Deutsch Informational [Page 15]
857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- RFC 1951 DEFLATE Compressed Data Format Specification May 1996
860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 5. References
863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- [1] Huffman, D. A., "A Method for the Construction of Minimum
865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Redundancy Codes", Proceedings of the Institute of Radio
866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Engineers, September 1952, Volume 40, Number 9, pp. 1098-1101.
867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- [2] Ziv J., Lempel A., "A Universal Algorithm for Sequential Data
869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Compression", IEEE Transactions on Information Theory, Vol. 23,
870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- No. 3, pp. 337-343.
871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- [3] Gailly, J.-L., and Adler, M., ZLIB documentation and sources,
873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- available in ftp://ftp.uu.net/pub/archiving/zip/doc/
874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- [4] Gailly, J.-L., and Adler, M., GZIP documentation and sources,
876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- available as gzip-*.tar in ftp://prep.ai.mit.edu/pub/gnu/
877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- [5] Schwartz, E. S., and Kallick, B. "Generating a canonical prefix
879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- encoding." Comm. ACM, 7,3 (Mar. 1964), pp. 166-169.
880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- [6] Hirschberg and Lelewer, "Efficient decoding of prefix codes,"
882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Comm. ACM, 33,4, April 1990, pp. 449-459.
883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 6. Security Considerations
885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Any data compression method involves the reduction of redundancy in
887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- the data. Consequently, any corruption of the data is likely to have
888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- severe effects and be difficult to correct. Uncompressed text, on
889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- the other hand, will probably still be readable despite the presence
890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- of some corrupted bytes.
891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- It is recommended that systems using this data format provide some
893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- means of validating the integrity of the compressed data. See
894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- reference [3], for example.
895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 7. Source code
897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Source code for a C language implementation of a "deflate" compliant
899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- compressor and decompressor is available within the zlib package at
900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ftp://ftp.uu.net/pub/archiving/zip/zlib/.
901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 8. Acknowledgements
903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Trademarks cited in this document are the property of their
905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- respective owners.
906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Phil Katz designed the deflate format. Jean-Loup Gailly and Mark
908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Adler wrote the related software described in this specification.
909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Glenn Randers-Pehrson converted this document to RFC and HTML format.
910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Deutsch Informational [Page 16]
914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- RFC 1951 DEFLATE Compressed Data Format Specification May 1996
917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 9. Author's Address
920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- L. Peter Deutsch
922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Aladdin Enterprises
923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 203 Santa Margarita Ave.
924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Menlo Park, CA 94025
925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Phone: (415) 322-0103 (AM only)
927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- FAX: (415) 322-1734
928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- EMail: <[email protected] >
929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Questions about the technical content of this specification can be
931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sent by email to:
932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Jean-Loup Gailly <[email protected] > and
934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Mark Adler <[email protected] >
935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Editorial comments on this specification can be sent by email to:
937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- L. Peter Deutsch <[email protected] > and
939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Glenn Randers-Pehrson <[email protected] >
940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Deutsch Informational [Page 17]
971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-