Class CompressLZF

java.lang.Object
org.h2.compress.CompressLZF
All Implemented Interfaces:
Compressor

public final class CompressLZF extends Object implements Compressor

This class implements the LZF lossless data compression algorithm. LZF is a Lempel-Ziv variant with byte-aligned output, and optimized for speed.

Safety/Use Notes:

  • Each instance should be used by a single thread only.
  • The data buffers should be smaller than 1 GB.
  • For performance reasons, safety checks on expansion are omitted.
  • Invalid compressed data can cause an ArrayIndexOutOfBoundsException.

The LZF compressed format knows literal runs and back-references:

  • Literal run: directly copy bytes from input to output.
  • Back-reference: copy previous data to output stream, with specified offset from location and length. The length is at least 3 bytes.

The first byte of the compressed stream is the control byte. For literal runs, the highest three bits of the control byte are not set, the lower bits are the literal run length, and the next bytes are data to copy directly into the output. For back-references, the highest three bits of the control byte are the back-reference length. If all three bits are set, then the back-reference length is stored in the next byte. The lower bits of the control byte combined with the next byte form the offset for the back-reference.

  • Constructor Details

    • CompressLZF

      public CompressLZF()
  • Method Details

    • setOptions

      public void setOptions(String options)
      Description copied from interface: Compressor
      Set the compression options. This may include settings for higher performance but less compression.
      Specified by:
      setOptions in interface Compressor
      Parameters:
      options - the options
    • compress

      public int compress(byte[] in, int inPos, int inLen, byte[] out, int outPos)
      Description copied from interface: Compressor
      Compress a number of bytes.
      Specified by:
      compress in interface Compressor
      Parameters:
      in - the input data
      inPos - the offset at the input array
      inLen - the number of bytes to compress
      out - the output area
      outPos - the offset at the output array
      Returns:
      the end position
    • compress

      public int compress(ByteBuffer in, int inPos, byte[] out, int outPos)
      Compress a number of bytes.
      Parameters:
      in - the input data
      inPos - the offset at the input buffer
      out - the output area
      outPos - the offset at the output array
      Returns:
      the end position
    • expand

      public void expand(byte[] in, int inPos, int inLen, byte[] out, int outPos, int outLen)
      Description copied from interface: Compressor
      Expand a number of compressed bytes.
      Specified by:
      expand in interface Compressor
      Parameters:
      in - the compressed data
      inPos - the offset at the input array
      inLen - the number of bytes to read
      out - the output area
      outPos - the offset at the output array
      outLen - the size of the uncompressed data
    • expand

      public static void expand(ByteBuffer in, ByteBuffer out)
      Expand a number of compressed bytes.
      Parameters:
      in - the compressed data
      out - the output area
    • getAlgorithm

      public int getAlgorithm()
      Description copied from interface: Compressor
      Get the compression algorithm type.
      Specified by:
      getAlgorithm in interface Compressor
      Returns:
      the type