each input data subblock to be compressed said compression method comprising the steps of b processing input data in the order in which the characters in the data appear and hashing input data subblocks of the minimum compression size selected c maintaining a hash table which contains at each entry an src pointer which points to a previous subblock which hashed to this hash table entry such that the possibility of any string of data previously occurring in the input block may be tested by hashing the current subblock to a hash table entry obtaining the previous src pointer contained in that entry and comparing the two strings of data d if the two strings of data match on at least the size of the subblock then generating a backwards pointer to the previous occurrence of the same string of data and thereby compressing the second occurrence of the string of data e if the two strings of data do not match then storing the string of data as incompressible data and f continuing steps b through e until the entire input data has been processed the backwards pointer is encoded with a variable number of bits and storing the backwards pointer to the most recent occurrence of a string thereby creating a short backwards distance to repeated strings in addition the present invention further comprises a method for expanding the stream of compressed data which has been compressed back into the original stream of data the expansion method comprising the steps of a determining for each segment of the compressed input data whether it comprises incompressible data or is a back pointer reference b if the input data segment comprises incompressible data copying.