A hardware data compressor for compressing an input block of characters, comprising: a first hardware engine configured to, for an initial fraction of the input block of characters: produce character string replacement back pointers and indicates characters not replaced by the back pointers; and generate occurrence frequencies of symbols associated with the produced back pointers and the non-replaced characters; a second hardware engine configured to construct a Huffman code table based on the frequencies generated for the initial fraction of the input block; the first hardware engine configured to, for the remainder of the input block beyond the initial fraction: produce character string replacement back pointers and indicates characters not replaced by the back pointers; a third hardware engine configured to, for the entire input block of characters: Huffman encode the symbols associated with the back pointers and the non-replaced characters using the Huffman code table constructed using the frequencies generated for the initial fraction of the input block; wherein the third hardware engine is configured to Huffman encode the symbols for the entire input block concurrently while the first hardware engine produces character string replacement back pointers and indicates characters not replaced by the back pointers for at least a portion of the remainder of the input block beyond the initial fraction; and a fourth hardware engine configured to: maintain a sorted list of the symbols by frequency of occurrence within the initial fraction of the input block while the first hardware engine produces character string replacement back pointers and indicates characters not replaced by the back pointers, wherein the second hardware engine is configured to use the sorted list to construct the Huffman code table. a first hardware engine configured to, for an initial fraction of the input block of characters: produce character string replacement back pointers and indicates characters not replaced by the back pointers; and generate occurrence frequencies of symbols associated with the produced back pointers and the non-replaced characters; produce character string replacement back pointers and indicates characters not replaced by the back pointers; and generate occurrence frequencies of symbols associated with the produced back pointers and the non-replaced characters; a second hardware engine configured to construct a Huffman code table based on the frequencies generated for the initial fraction of the input block; the first hardware engine configured to, for the remainder of the input block beyond the initial fraction: produce character string replacement back pointers and indicates characters not replaced by the back pointers; a third hardware engine configured to, for the entire input block of characters: Huffman encode the symbols associated with the back pointers and the non-replaced characters using the Huffman code table constructed using the frequencies generated for the initial fraction of the input block; wherein the third hardware engine is configured to Huffman encode the symbols for the entire input block concurrently while the first hardware engine produces character string replacement back pointers and indicates characters not replaced by the back pointers for at least a portion of the remainder of the input block beyond the initial fraction; and Huffman encode the symbols associated with the back pointers and the non-replaced characters using the Huffman code table constructed using the frequencies generated for the initial fraction of the input block; wherein the third hardware engine is configured to Huffman encode the symbols for the entire input block concurrently while the first hardware engine produces character string replacement back pointers and indicates characters not replaced by the back pointers for at least a portion of the remainder of the input block beyond the initial fraction; and a fourth hardware engine configured to: maintain a sorted list of the symbols by frequency of occurrence within the initial fraction of the input block while the first hardware engine produces character string replacement back pointers and indicates characters not replaced by the back pointers, wherein the second hardware engine is configured to use the sorted list to construct the Huffman code table. maintain a sorted list of the symbols by frequency of occurrence within the initial fraction of the input block while the first hardware engine produces character string replacement back pointers and indicates characters not replaced by the back pointers, wherein the second hardware engine is configured to use the sorted list to construct the Huffman code table.