public class LZ77Compressor extends Object
Most LZ77 derived algorithms split input data into blocks of
 uncompressed data (called literal blocks) and back-references
 (pairs of offsets and lengths) that state "add length
 bytes that are the same as those already written starting
 offset bytes before the current position. The details
 of how those blocks and back-references are encoded are quite
 different between the algorithms and some algorithms perform
 additional steps (Huffman encoding in the case of DEFLATE for
 example).
This class attempts to extract the core logic - finding back-references - so it can be re-used. It follows the algorithm explained in section 4 of RFC 1951 (DEFLATE) and currently doesn't implement the "lazy match" optimization. The three-byte hash function used in this class is the same as the one used by zlib and InfoZIP's ZIP implementation of DEFLATE. The whole class is strongly inspired by InfoZIP's implementation.
LZ77 is used vaguely here (as well as many other places that talk about it :-), LZSS would likely be closer to the truth but LZ77 has become the synonym for a whole family of algorithms.
The API consists of a compressor that is fed bytes
 and emits LZ77Compressor.Blocks to a registered callback where the blocks
 represent either literal blocks, back-references or end of data
 markers. In order to ensure the callback receives all information,
 the #finish method must be used once all data has been fed
 into the compressor.
Several parameters influence the outcome of the "compression":
windowSizewindowSize - real world values are
  in the area of 32k.minBackReferenceLengthmaxBackReferenceLengthmaxOffsetmaxLiteralLength| Modifier and Type | Class and Description | 
|---|---|
| static class  | LZ77Compressor.BackReferenceRepresents a back-reference. | 
| static class  | LZ77Compressor.BlockBase class representing blocks the compressor may emit. | 
| static interface  | LZ77Compressor.CallbackCallback invoked while the compressor processes data. | 
| static class  | LZ77Compressor.EODA simple "we are done" marker. | 
| static class  | LZ77Compressor.LiteralBlockRepresents a literal block of data. | 
| Constructor and Description | 
|---|
| LZ77Compressor(Parameters params,
              LZ77Compressor.Callback callback)Initializes a compressor with parameters and a callback. | 
| Modifier and Type | Method and Description | 
|---|---|
| void | compress(byte[] data)Feeds bytes into the compressor which in turn may emit zero or
 more blocks to the callback during the execution of this
 method. | 
| void | compress(byte[] data,
        int off,
        int len)Feeds bytes into the compressor which in turn may emit zero or
 more blocks to the callback during the execution of this
 method. | 
| void | finish()Tells the compressor to process all remaining data and signal
 end of data to the callback. | 
| void | prefill(byte[] data)Adds some initial data to fill the window with. | 
public LZ77Compressor(Parameters params, LZ77Compressor.Callback callback)
params - the parameterscallback - the callbackNullPointerException - if either parameter is nullpublic void compress(byte[] data) throws IOException
data - the data to compress - must not be nullIOException - if the callback throws an exceptionpublic void compress(byte[] data, int off, int len) throws IOException
data - the data to compress - must not be nulloff - the start offset of the datalen - the number of bytes to compressIOException - if the callback throws an exceptionpublic void finish() throws IOException
The compressor will in turn emit at least one block (LZ77Compressor.EOD) but potentially multiple blocks to the callback during
 the execution of this method.
IOException - if the callback throws an exceptionpublic void prefill(byte[] data)
This is used if the stream has been cut into blocks and back-references of one block may refer to data of the previous block(s). One such example is the LZ4 frame format using block dependency.
data - the data to fill the window with.IllegalStateException - if the compressor has already started to accept dataCopyright © 2018 The Apache Software Foundation. All rights reserved.