Class Bzip2BlockCompressor
- java.lang.Object
-
- io.netty.handler.codec.compression.Bzip2BlockCompressor
-
final class Bzip2BlockCompressor extends java.lang.ObjectCompresses and writes a single Bzip2 block.
Block encoding consists of the following stages:
1. Run-Length Encoding[1] -write(int)
2. Burrows Wheeler Transform -close(ByteBuf)(throughBzip2DivSufSort)
3. Write block header -close(ByteBuf)
4. Move To Front Transform -close(ByteBuf)(throughBzip2HuffmanStageEncoder)
5. Run-Length Encoding[2] -close(ByteBuf)(throughBzip2HuffmanStageEncoder)
6. Create and write Huffman tables -close(ByteBuf)(throughBzip2HuffmanStageEncoder)
7. Huffman encode and write data -close(ByteBuf)(throughBzip2HuffmanStageEncoder)
-
-
Field Summary
Fields Modifier and Type Field Description private byte[]blockThe RLE'd block data.private intblockLengthCurrent length of the data within theblockarray.private intblockLengthLimitA limit beyond which new data will not be accepted into the block.private boolean[]blockValuesPresentThe values that are present within the RLE'd block data.private int[]bwtBlockThe Burrows Wheeler Transformed block data.private Crc32crcCRC builder for the block.private intrleCurrentValueThe current RLE value being accumulated (undefined whenrleLengthis 0).private intrleLengthThe repeat count of the current RLE value.private ByteProcessorwriteProcessorprivate Bzip2BitWriterwriterA writer that provides bit-level writes.
-
Constructor Summary
Constructors Constructor Description Bzip2BlockCompressor(Bzip2BitWriter writer, int blockSize)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) intavailableSize()Gets available size of the current block.(package private) voidclose(ByteBuf out)Compresses and writes out the block.(package private) intcrc()Gets the CRC of the completed block.(package private) booleanisEmpty()Determines if any bytes have been written to the block.(package private) booleanisFull()Determines if the block is full and ready for compression.(package private) booleanwrite(int value)Writes a byte to the block, accumulating to an RLE run where possible.(package private) intwrite(ByteBuf buffer, int offset, int length)Writes an array to the block.private voidwriteRun(int value, int runLength)Writes an RLE run to the block array, updating the block CRC and present values array as required.private voidwriteSymbolMap(ByteBuf out)Write the Huffman symbol to output byte map.
-
-
-
Field Detail
-
writeProcessor
private final ByteProcessor writeProcessor
-
writer
private final Bzip2BitWriter writer
A writer that provides bit-level writes.
-
crc
private final Crc32 crc
CRC builder for the block.
-
block
private final byte[] block
The RLE'd block data.
-
blockLength
private int blockLength
Current length of the data within theblockarray.
-
blockLengthLimit
private final int blockLengthLimit
A limit beyond which new data will not be accepted into the block.
-
blockValuesPresent
private final boolean[] blockValuesPresent
The values that are present within the RLE'd block data. For each index,trueif that value is present within the data, otherwisefalse.
-
bwtBlock
private final int[] bwtBlock
The Burrows Wheeler Transformed block data.
-
rleCurrentValue
private int rleCurrentValue
The current RLE value being accumulated (undefined whenrleLengthis 0).
-
rleLength
private int rleLength
The repeat count of the current RLE value.
-
-
Constructor Detail
-
Bzip2BlockCompressor
Bzip2BlockCompressor(Bzip2BitWriter writer, int blockSize)
- Parameters:
writer- TheBzip2BitWriterwhich provides bit-level writesblockSize- The declared block size in bytes. Up to this many bytes will be accepted into the block after Run-Length Encoding is applied
-
-
Method Detail
-
writeSymbolMap
private void writeSymbolMap(ByteBuf out)
Write the Huffman symbol to output byte map.
-
writeRun
private void writeRun(int value, int runLength)Writes an RLE run to the block array, updating the block CRC and present values array as required.- Parameters:
value- The value to writerunLength- The run length of the value to write
-
write
boolean write(int value)
Writes a byte to the block, accumulating to an RLE run where possible.- Parameters:
value- The byte to write- Returns:
trueif the byte was written, orfalseif the block is already full
-
write
int write(ByteBuf buffer, int offset, int length)
Writes an array to the block.- Parameters:
buffer- The buffer to writeoffset- The offset within the input data to write fromlength- The number of bytes of input data to write- Returns:
- The actual number of input bytes written. May be less than the number requested, or zero if the block is already full
-
close
void close(ByteBuf out)
Compresses and writes out the block.
-
availableSize
int availableSize()
Gets available size of the current block.- Returns:
- Number of available bytes which can be written
-
isFull
boolean isFull()
Determines if the block is full and ready for compression.- Returns:
trueif the block is full, otherwisefalse
-
isEmpty
boolean isEmpty()
Determines if any bytes have been written to the block.- Returns:
trueif one or more bytes has been written to the block, otherwisefalse
-
crc
int crc()
Gets the CRC of the completed block. Only valid after callingclose(ByteBuf).- Returns:
- The block's CRC
-
-