Package com.ning.compress.lzf.impl
Class UnsafeChunkDecoder
- java.lang.Object
-
- com.ning.compress.lzf.ChunkDecoder
-
- com.ning.compress.lzf.impl.UnsafeChunkDecoder
-
public class UnsafeChunkDecoder extends ChunkDecoder
Highly optimizedChunkDecoder
implementation that uses Sun JDK's Unsafe class (which may be included by other JDK's as well; IBM's apparently does).Credits for the idea go to Dain Sundstrom, who kindly suggested this use, and is all-around great source for optimization tips and tricks. Big thanks also to LZ4-java developers, whose stellar performance made me go back and see what more I can do to optimize this code!
-
-
Field Summary
-
Fields inherited from class com.ning.compress.lzf.ChunkDecoder
BYTE_NULL, HEADER_BYTES
-
-
Constructor Summary
Constructors Constructor Description UnsafeChunkDecoder()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
decodeChunk(byte[] in, int inPos, byte[] out, int outPos, int outEnd)
Main decode method for individual chunks.int
decodeChunk(InputStream is, byte[] inputBuffer, byte[] outputBuffer)
Main decode from a stream.int
skipOrDecodeChunk(InputStream is, byte[] inputBuffer, byte[] outputBuffer, long maxToSkip)
-
Methods inherited from class com.ning.compress.lzf.ChunkDecoder
_reportArrayOverflow, _reportCorruptHeader, calculateUncompressedSize, decode, decode, decode, decode, readFully, readHeader, skipFully, uint16
-
-
-
-
Method Detail
-
decodeChunk
public final int decodeChunk(InputStream is, byte[] inputBuffer, byte[] outputBuffer) throws IOException
Description copied from class:ChunkDecoder
Main decode from a stream. Decompressed bytes are placed in the outputBuffer, inputBuffer is a "scratch-area".- Specified by:
decodeChunk
in classChunkDecoder
- Parameters:
is
- An input stream of LZF compressed bytesinputBuffer
- A byte array used as a scratch area.outputBuffer
- A byte array in which the result is returned- Returns:
- The number of bytes placed in the outputBuffer.
- Throws:
IOException
-
decodeChunk
public final void decodeChunk(byte[] in, int inPos, byte[] out, int outPos, int outEnd) throws LZFException
Description copied from class:ChunkDecoder
Main decode method for individual chunks.- Specified by:
decodeChunk
in classChunkDecoder
- Throws:
LZFException
-
skipOrDecodeChunk
public int skipOrDecodeChunk(InputStream is, byte[] inputBuffer, byte[] outputBuffer, long maxToSkip) throws IOException
- Specified by:
skipOrDecodeChunk
in classChunkDecoder
- Returns:
- If positive number, number of bytes skipped; if -1, end-of-stream was
reached; otherwise, amount of content
decoded (using formula of
returnValue = -(decodedAmount + 2)
) - Throws:
IOException
-
-