Package org.brotli.dec
Class Decode
java.lang.Object
org.brotli.dec.Decode
API for Brotli decompression.
-
Field Summary
FieldsModifier and TypeFieldDescription(package private) static final int[]
(package private) static final int[]
private static final int
private static final int
private static final int
(package private) static final short[]
private static final int[]
private static final int
private static final int
private static final int
private static final int
(package private) static final short[]
private static final int
private static final int
private static final int
private static final int
private static final int[]
private static final int[]
private static final int
private static final int[]
Static Huffman code for the code length code lengths.private static final int
private static final int
private static final int
private static final int
private static final int
private static final int
(package private) static final short[]
private static final int
private static final int
private static final int
private static final int
Safe distance limit.private static final int
(package private) static final int[]
Maximum possible Huffman table size for an alphabet size of (index * 32), max code length 15 and root table bits 8.(package private) static final int
private static final int
(package private) static final int
(package private) static final int
private static final int
private static final int
private static final int
private static final int
private static final int
private static final int
private static final int
private static final int
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescription(package private) static void
attachDictionaryChunk
(State s, byte[] data) private static int
calculateDistanceAlphabetLimit
(int maxDistance, int npostfix, int ndirect) private static int
calculateDistanceAlphabetSize
(int npostfix, int ndirect, int maxndistbits) private static void
calculateDistanceLut
(State s, int alphabetSizeLimit) private static int
private static void
checkDupes
(int[] symbols, int length) (package private) static void
private static int
copyFromCompoundDictionary
(State s, int fence) private static void
private static int
decodeBlockTypeAndLength
(State s, int treeType, int numBlockTypes) private static void
private static int
decodeContextMap
(int contextMapSize, byte[] contextMap, State s) private static void
private static int[]
decodeHuffmanTreeGroup
(int alphabetSizeMax, int alphabetSizeLimit, int n, State s) private static void
private static void
private static int
Decodes a number in the range [0..255], by reading 1 - 11 bits.private static int
Reads brotli stream header and parses "window bits".(package private) static void
decompress
(State s) Actual decompress implementation.private static void
doUseDictionary
(State s, int fence) (package private) static void
Switch decoder to "eager" mode.(package private) static void
private static void
private static void
initializeCompoundDictionaryCopy
(State s, int address, int length) (package private) static void
initState
(State s, InputStream input) Associate input with decoder state.private static void
inverseMoveToFrontTransform
(byte[] v, int vLen) private static int
log2floor
(int i) private static void
private static void
moveToFront
(int[] v, int index) private static int
readBlockLength
(int[] tableGroup, int tableIdx, State s) private static int
readComplexHuffmanCode
(int alphabetSizeLimit, int skip, int[] tableGroup, int tableIdx, State s) private static int
readHuffmanCode
(int alphabetSizeMax, int alphabetSizeLimit, int[] tableGroup, int tableIdx, State s) Decodes Huffman table from bit-stream.private static void
readHuffmanCodeLengths
(int[] codeLengthCodeLengths, int numSymbols, int[] codeLengths, State s) private static void
private static int
readMetablockPartition
(State s, int treeType, int numBlockTypes) private static void
private static int
readSimpleHuffmanCode
(int alphabetSizeMax, int alphabetSizeLimit, int[] tableGroup, int tableIdx, State s) Reads up to 4 symbols directly and applies predefined histograms.private static int
readSymbol
(int[] tableGroup, int tableIdx, State s) Decodes the next Huffman code from bit-stream.private static void
unpackCommandLookupTable
(short[] cmdLookup) private static int
-
Field Details
-
MIN_LARGE_WINDOW_BITS
static final int MIN_LARGE_WINDOW_BITS- See Also:
-
MAX_LARGE_WINDOW_BITS
static final int MAX_LARGE_WINDOW_BITS- See Also:
-
UNINITIALIZED
private static final int UNINITIALIZED- See Also:
-
INITIALIZED
private static final int INITIALIZED- See Also:
-
BLOCK_START
private static final int BLOCK_START- See Also:
-
COMPRESSED_BLOCK_START
private static final int COMPRESSED_BLOCK_START- See Also:
-
MAIN_LOOP
private static final int MAIN_LOOP- See Also:
-
READ_METADATA
private static final int READ_METADATA- See Also:
-
COPY_UNCOMPRESSED
private static final int COPY_UNCOMPRESSED- See Also:
-
INSERT_LOOP
private static final int INSERT_LOOP- See Also:
-
COPY_LOOP
private static final int COPY_LOOP- See Also:
-
USE_DICTIONARY
private static final int USE_DICTIONARY- See Also:
-
FINISHED
private static final int FINISHED- See Also:
-
CLOSED
private static final int CLOSED- See Also:
-
INIT_WRITE
private static final int INIT_WRITE- See Also:
-
WRITE
private static final int WRITE- See Also:
-
COPY_FROM_COMPOUND_DICTIONARY
private static final int COPY_FROM_COMPOUND_DICTIONARY- See Also:
-
DEFAULT_CODE_LENGTH
private static final int DEFAULT_CODE_LENGTH- See Also:
-
CODE_LENGTH_REPEAT_CODE
private static final int CODE_LENGTH_REPEAT_CODE- See Also:
-
NUM_LITERAL_CODES
private static final int NUM_LITERAL_CODES- See Also:
-
NUM_COMMAND_CODES
private static final int NUM_COMMAND_CODES- See Also:
-
NUM_BLOCK_LENGTH_CODES
private static final int NUM_BLOCK_LENGTH_CODES- See Also:
-
LITERAL_CONTEXT_BITS
private static final int LITERAL_CONTEXT_BITS- See Also:
-
DISTANCE_CONTEXT_BITS
private static final int DISTANCE_CONTEXT_BITS- See Also:
-
CD_BLOCK_MAP_BITS
private static final int CD_BLOCK_MAP_BITS- See Also:
-
HUFFMAN_TABLE_BITS
private static final int HUFFMAN_TABLE_BITS- See Also:
-
HUFFMAN_TABLE_MASK
private static final int HUFFMAN_TABLE_MASK- See Also:
-
MAX_HUFFMAN_TABLE_SIZE
static final int[] MAX_HUFFMAN_TABLE_SIZEMaximum possible Huffman table size for an alphabet size of (index * 32), max code length 15 and root table bits 8. The biggest alphabet is "command" - 704 symbols. Though "distance" alphabet could theoretically outreach that limit (for 62 extra bit distances), practically it is limited by MAX_ALLOWED_DISTANCE and never gets bigger than 544 symbols. -
HUFFMAN_TABLE_SIZE_26
private static final int HUFFMAN_TABLE_SIZE_26- See Also:
-
HUFFMAN_TABLE_SIZE_258
private static final int HUFFMAN_TABLE_SIZE_258- See Also:
-
CODE_LENGTH_CODES
private static final int CODE_LENGTH_CODES- See Also:
-
CODE_LENGTH_CODE_ORDER
private static final int[] CODE_LENGTH_CODE_ORDER -
NUM_DISTANCE_SHORT_CODES
private static final int NUM_DISTANCE_SHORT_CODES- See Also:
-
DISTANCE_SHORT_CODE_INDEX_OFFSET
private static final int[] DISTANCE_SHORT_CODE_INDEX_OFFSET -
DISTANCE_SHORT_CODE_VALUE_OFFSET
private static final int[] DISTANCE_SHORT_CODE_VALUE_OFFSET -
FIXED_TABLE
private static final int[] FIXED_TABLEStatic Huffman code for the code length code lengths. -
MAX_TRANSFORMED_WORD_LENGTH
static final int MAX_TRANSFORMED_WORD_LENGTH- See Also:
-
MAX_DISTANCE_BITS
private static final int MAX_DISTANCE_BITS- See Also:
-
MAX_LARGE_WINDOW_DISTANCE_BITS
private static final int MAX_LARGE_WINDOW_DISTANCE_BITS- See Also:
-
MAX_ALLOWED_DISTANCE
private static final int MAX_ALLOWED_DISTANCESafe distance limit. Limit ((1 invalid input: '<'invalid input: '<' 31) - 4) allows safe distance calculation without overflows, given the distance alphabet size is limited to corresponding size.- See Also:
-
BLOCK_LENGTH_OFFSET
static final int[] BLOCK_LENGTH_OFFSET -
BLOCK_LENGTH_N_BITS
static final int[] BLOCK_LENGTH_N_BITS -
INSERT_LENGTH_N_BITS
static final short[] INSERT_LENGTH_N_BITS -
COPY_LENGTH_N_BITS
static final short[] COPY_LENGTH_N_BITS -
CMD_LOOKUP
static final short[] CMD_LOOKUP
-
-
Constructor Details
-
Decode
Decode()
-
-
Method Details
-
log2floor
private static int log2floor(int i) -
calculateDistanceAlphabetSize
private static int calculateDistanceAlphabetSize(int npostfix, int ndirect, int maxndistbits) -
calculateDistanceAlphabetLimit
private static int calculateDistanceAlphabetLimit(int maxDistance, int npostfix, int ndirect) -
unpackCommandLookupTable
private static void unpackCommandLookupTable(short[] cmdLookup) -
decodeWindowBits
Reads brotli stream header and parses "window bits".- Parameters:
s
- initialized state, before any read is performed.- Returns:
- -1 if header is invalid
-
enableEagerOutput
Switch decoder to "eager" mode. In "eager" mode decoder returns as soon as there is enough data to fill output buffer.- Parameters:
s
- initialized state, before any read is performed.
-
enableLargeWindow
-
attachDictionaryChunk
-
initState
Associate input with decoder state.- Parameters:
s
- uninitialized state without associated inputinput
- compressed data source
-
close
- Throws:
IOException
-
decodeVarLenUnsignedByte
Decodes a number in the range [0..255], by reading 1 - 11 bits. -
decodeMetaBlockLength
-
readSymbol
Decodes the next Huffman code from bit-stream. -
readBlockLength
-
moveToFront
private static void moveToFront(int[] v, int index) -
inverseMoveToFrontTransform
private static void inverseMoveToFrontTransform(byte[] v, int vLen) -
readHuffmanCodeLengths
private static void readHuffmanCodeLengths(int[] codeLengthCodeLengths, int numSymbols, int[] codeLengths, State s) -
checkDupes
private static void checkDupes(int[] symbols, int length) -
readSimpleHuffmanCode
private static int readSimpleHuffmanCode(int alphabetSizeMax, int alphabetSizeLimit, int[] tableGroup, int tableIdx, State s) Reads up to 4 symbols directly and applies predefined histograms. -
readComplexHuffmanCode
private static int readComplexHuffmanCode(int alphabetSizeLimit, int skip, int[] tableGroup, int tableIdx, State s) -
readHuffmanCode
private static int readHuffmanCode(int alphabetSizeMax, int alphabetSizeLimit, int[] tableGroup, int tableIdx, State s) Decodes Huffman table from bit-stream.- Returns:
- number of slots used by resulting Huffman table
-
decodeContextMap
-
decodeBlockTypeAndLength
-
decodeLiteralBlockSwitch
-
decodeCommandBlockSwitch
-
decodeDistanceBlockSwitch
-
maybeReallocateRingBuffer
-
readNextMetablockHeader
-
readMetablockPartition
-
calculateDistanceLut
-
readMetablockHuffmanCodesAndContextMaps
-
copyUncompressedData
-
writeRingBuffer
-
decodeHuffmanTreeGroup
private static int[] decodeHuffmanTreeGroup(int alphabetSizeMax, int alphabetSizeLimit, int n, State s) -
calculateFence
-
doUseDictionary
-
initializeCompoundDictionary
-
initializeCompoundDictionaryCopy
-
copyFromCompoundDictionary
-
decompress
Actual decompress implementation.
-