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 Modifier and Type Field Description private static long
BYTE_ARRAY_OFFSET
private static sun.misc.Unsafe
unsafe
-
Fields inherited from class com.ning.compress.lzf.ChunkDecoder
BYTE_NULL, HEADER_BYTES
-
-
Constructor Summary
Constructors Constructor Description UnsafeChunkDecoder()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private static void
copyLong(byte[] buffer, int inputIndex, int outputIndex, int length, int outputEnd8)
private static void
copyLongTail(byte[] buffer, int inputIndex, int outputIndex, int length)
private static int
copyOverlappingLong(byte[] out, int outPos, int offset, int len)
private int
copyOverlappingShort(byte[] out, int outPos, int offset, int len)
private static void
copyUpTo32(byte[] in, int inputIndex, byte[] out, int outputIndex, int lengthMinusOne)
private static void
copyUpTo32(byte[] buffer, int inputIndex, int outputIndex, int lengthMinusOne)
void
decodeChunk(byte[] in, int inPos, byte[] out, int outPos, int outEnd)
Main decode method for individual chunks.int
decodeChunk(java.io.InputStream is, byte[] inputBuffer, byte[] outputBuffer)
Main decode from a stream.int
skipOrDecodeChunk(java.io.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(java.io.InputStream is, byte[] inputBuffer, byte[] outputBuffer) throws java.io.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:
java.io.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(java.io.InputStream is, byte[] inputBuffer, byte[] outputBuffer, long maxToSkip) throws java.io.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:
java.io.IOException
-
copyOverlappingShort
private final int copyOverlappingShort(byte[] out, int outPos, int offset, int len)
-
copyOverlappingLong
private static final int copyOverlappingLong(byte[] out, int outPos, int offset, int len)
-
copyUpTo32
private static final void copyUpTo32(byte[] buffer, int inputIndex, int outputIndex, int lengthMinusOne)
-
copyUpTo32
private static final void copyUpTo32(byte[] in, int inputIndex, byte[] out, int outputIndex, int lengthMinusOne)
-
copyLong
private static final void copyLong(byte[] buffer, int inputIndex, int outputIndex, int length, int outputEnd8)
-
copyLongTail
private static final void copyLongTail(byte[] buffer, int inputIndex, int outputIndex, int length)
-
-