A hardware data compressor, comprising: a first hardware engine that scans an input block of characters to produce a stream of tokens, the stream of tokens comprising replacement back pointers to matched strings of characters of the input block and non-replaced characters of the input block; a second hardware engine that receives the stream of tokens and maintains a sorted list of symbols associated with the tokens; the second hardware engine concurrently maintains the sorted list of symbols by frequency of occurrence as the first hardware engine produces the tokens of the stream; characterised by a third hardware engine that constructs a Huffman code table using the sorted list of symbols, the third hardware engine commencing construction of the Huffman code table using the sorted list of symbols in response to changes of the sorted list by the second hardware engine and prior to completion of the scan of the input block by the first hardware engine; and a fourth hardware engine that Huffman encodes the stream of tokens using a last construction of the Huffman code table performed by the third hardware engine in response to a last change of the sorted list; whereby if the third hardware engine began the last construction of the Huffman code table after the last change to the sorted list and completed the last construction before the completion of the scan of the input block, the fourth hardware engine begins to Huffman encode the stream of tokens at the completion of the scan of the input block; and otherwise, the fourth hardware engine begins to Huffman encode the stream of tokens at the completion of the last construction of the Huffman code table. a first hardware engine that scans an input block of characters to produce a stream of tokens, the stream of tokens comprising replacement back pointers to matched strings of characters of the input block and non-replaced characters of the input block; a second hardware engine that receives the stream of tokens and maintains a sorted list of symbols associated with the tokens; the second hardware engine concurrently maintains the sorted list of symbols by frequency of occurrence as the first hardware engine produces the tokens of the stream; characterised by a third hardware engine that constructs a Huffman code table using the sorted list of symbols, the third hardware engine commencing construction of the Huffman code table using the sorted list of symbols in response to changes of the sorted list by the second hardware engine and prior to completion of the scan of the input block by the first hardware engine; and a fourth hardware engine that Huffman encodes the stream of tokens using a last construction of the Huffman code table performed by the third hardware engine in response to a last change of the sorted list; whereby if the third hardware engine began the last construction of the Huffman code table after the last change to the sorted list and completed the last construction before the completion of the scan of the input block, the fourth hardware engine begins to Huffman encode the stream of tokens at the completion of the scan of the input block; and otherwise, the fourth hardware engine begins to Huffman encode the stream of tokens at the completion of the last construction of the Huffman code table.