Package org.xerial.snappy
Class Snappy
java.lang.Object
org.xerial.snappy.Snappy
Snappy API for data compression/decompression
Note: if the native libraries cannot be loaded, an ExceptionInInitializerError
will be thrown at first use of this class.
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic void
Copy bytes from source to destinationstatic void
cleanUp()
Clean up a temporary file (native lib) generated by snappy-java.static byte[]
compress
(byte[] input) High-level API for compressing the input byte array.static int
compress
(byte[] input, int inputOffset, int inputLength, byte[] output, int outputOffset) Compress the input buffer content in [inputOffset, ...inputOffset+inputLength) then output to the specified output buffer.static byte[]
compress
(char[] input) Compress the input char arraystatic byte[]
compress
(double[] input) Compress the input double arraystatic byte[]
compress
(float[] input) Compress the input float arraystatic byte[]
compress
(int[] input) Compress the input int arraystatic byte[]
compress
(long[] input) Compress the input long arraystatic byte[]
compress
(short[] input) Compress the input short arraystatic byte[]
Compress the input Stringstatic byte[]
Compress the input string using the given encodingstatic byte[]
Compress the input string using the given encodingstatic int
compress
(ByteBuffer uncompressed, ByteBuffer compressed) Compress the content in the given input buffer.static String
Get the native library version of the snappy(package private) static void
init()
static boolean
isValidCompressedBuffer
(byte[] input) Returns true iff the contents of compressed buffer [offset, offset+length) can be uncompressed successfully.static boolean
isValidCompressedBuffer
(byte[] input, int offset, int length) Returns true iff the contents of compressed buffer [offset, offset+length) can be uncompressed successfully.static boolean
isValidCompressedBuffer
(long inputAddr, long offset, long length) Returns true iff the contents of compressed buffer [offset, offset+length) can be uncompressed successfully.static boolean
isValidCompressedBuffer
(ByteBuffer compressed) Returns true iff the contents of compressed buffer [pos() ...static int
maxCompressedLength
(int byteSize) Get the maximum byte size needed for compressing data of the given byte size.static long
rawCompress
(long inputAddr, long inputSize, long destAddr) Zero-copy compress using memory addresses.static byte[]
rawCompress
(Object data, int byteSize) Compress the input data and produce a byte array of the uncompressed datastatic int
rawCompress
(Object input, int inputOffset, int inputLength, byte[] output, int outputOffset) Compress the input buffer [offset,...static int
rawUncompress
(byte[] input, int inputOffset, int inputLength, Object output, int outputOffset) Uncompress the content in the input buffer.static long
rawUncompress
(long inputAddr, long inputSize, long destAddr) Zero-copy decompress using memory addresses.static byte[]
uncompress
(byte[] input) High-level API for uncompressing the input byte array.static int
uncompress
(byte[] input, int inputOffset, int inputLength, byte[] output, int outputOffset) Uncompress the content in the input buffer.static int
uncompress
(ByteBuffer compressed, ByteBuffer uncompressed) Uncompress the content in the input buffer.static char[]
uncompressCharArray
(byte[] input) Uncompress the input data as char arraystatic char[]
uncompressCharArray
(byte[] input, int offset, int length) Uncompress the input[offset, .., offset+length) as a char arraystatic double[]
uncompressDoubleArray
(byte[] input) Uncompress the input as a double arraystatic double[]
uncompressDoubleArray
(byte[] input, int offset, int length) Uncompress the input as a double arraystatic int
uncompressedLength
(byte[] input) Get the uncompressed byte size of the given compressed input.static int
uncompressedLength
(byte[] input, int offset, int length) Get the uncompressed byte size of the given compressed input.static long
uncompressedLength
(long inputAddr, long len) Get the uncompressed byte size of the given compressed input.static int
uncompressedLength
(ByteBuffer compressed) Get the uncompressed byte size of the given compressed input.static float[]
uncompressFloatArray
(byte[] input) Uncompress the input as a float arraystatic float[]
uncompressFloatArray
(byte[] input, int offset, int length) Uncompress the input[offset, offset+length) as a float arraystatic int[]
uncompressIntArray
(byte[] input) Uncompress the input data as an int arraystatic int[]
uncompressIntArray
(byte[] input, int offset, int length) Uncompress the input[offset, offset+length) as an int arraystatic long[]
uncompressLongArray
(byte[] input) Uncompress the input data as a long arraystatic long[]
uncompressLongArray
(byte[] input, int offset, int length) Uncompress the input[offset, offset+length) as a long arraystatic short[]
uncompressShortArray
(byte[] input) Uncompress the input as a short arraystatic short[]
uncompressShortArray
(byte[] input, int offset, int length) Uncompress the input[offset, offset+length) as a short arraystatic String
uncompressString
(byte[] input) Uncompress the input as a Stringstatic String
uncompressString
(byte[] input, int offset, int length) Uncompress the input[offset, offset+length) as a Stringstatic String
uncompressString
(byte[] input, int offset, int length, String encoding) Uncompress the input[offset, offset+length) as a String of the given encodingstatic String
uncompressString
(byte[] input, int offset, int length, Charset encoding) Uncompress the input[offset, offset+length) as a String of the given encodingstatic String
uncompressString
(byte[] input, String encoding) Uncompress the input as a String of the given encodingstatic String
uncompressString
(byte[] input, Charset encoding) Uncompress the input as a String of the given encoding
-
Field Details
-
impl
An instance of SnappyNative
-
-
Constructor Details
-
Snappy
public Snappy()
-
-
Method Details
-
cleanUp
public static void cleanUp()Clean up a temporary file (native lib) generated by snappy-java. General users do not need to call this method, since the native library extracted in snappy-java is deleted upon JVM termination (vie deleteOnExit()). This method is useful when using a J2EE container, which will restart servlet containers multiple times without restarting JVM. -
init
static void init() -
arrayCopy
public static void arrayCopy(Object src, int offset, int byteLength, Object dest, int dest_offset) throws IOException Copy bytes from source to destination- Parameters:
src
- pointer to the source arrayoffset
- byte offset in the source arraybyteLength
- the number of bytes to copydest
- pointer to the destination arraydest_offset
- byte offset in the destination array- Throws:
IOException
-
compress
High-level API for compressing the input byte array. This method performs array copy to generate the result. If you want to reduce the memory copy cost, usecompress(byte[], int, int, byte[], int)
orcompress(ByteBuffer, ByteBuffer)
.- Parameters:
input
- the input data- Returns:
- the compressed byte array
- Throws:
IOException
-
compress
public static int compress(byte[] input, int inputOffset, int inputLength, byte[] output, int outputOffset) throws IOException Compress the input buffer content in [inputOffset, ...inputOffset+inputLength) then output to the specified output buffer.- Parameters:
input
-inputOffset
-inputLength
-output
-outputOffset
-- Returns:
- byte size of the compressed data
- Throws:
IOException
- when failed to access the input/output buffer
-
compress
Compress the content in the given input buffer. After the compression, you can retrieve the compressed data from the output buffer [pos() ... limit()) (compressed data size = limit() - pos() = remaining())- Parameters:
uncompressed
- buffer[pos() ... limit()) containing the input datacompressed
- output of the compressed data. Uses range [pos()..].- Returns:
- byte size of the compressed data.
- Throws:
SnappyError
- when the input is not a direct bufferIOException
-
compress
Compress the input char array- Parameters:
input
-- Returns:
- the compressed data
- Throws:
IOException
-
compress
Compress the input double array- Parameters:
input
-- Returns:
- the compressed data
- Throws:
IOException
-
compress
Compress the input float array- Parameters:
input
-- Returns:
- the compressed data
- Throws:
IOException
-
compress
Compress the input int array- Parameters:
input
-- Returns:
- the compressed data
- Throws:
IOException
-
compress
Compress the input long array- Parameters:
input
-- Returns:
- the compressed data
- Throws:
IOException
-
compress
Compress the input short array- Parameters:
input
-- Returns:
- the compressed data
- Throws:
IOException
-
compress
Compress the input String- Parameters:
s
-- Returns:
- the compressed data
- Throws:
IOException
-
compress
public static byte[] compress(String s, String encoding) throws UnsupportedEncodingException, IOException Compress the input string using the given encoding- Parameters:
s
-encoding
-- Returns:
- the compressed data
- Throws:
UnsupportedEncodingException
IOException
-
compress
Compress the input string using the given encoding- Parameters:
s
-encoding
-- Returns:
- the compressed data
- Throws:
UnsupportedEncodingException
IOException
-
getNativeLibraryVersion
Get the native library version of the snappy- Returns:
- native library version
-
isValidCompressedBuffer
public static boolean isValidCompressedBuffer(byte[] input, int offset, int length) throws IOException Returns true iff the contents of compressed buffer [offset, offset+length) can be uncompressed successfully. Does not return the uncompressed data. Takes time proportional to the input length, but is usually at least a factor of four faster than actual decompression.- Throws:
IOException
-
isValidCompressedBuffer
Returns true iff the contents of compressed buffer [offset, offset+length) can be uncompressed successfully. Does not return the uncompressed data. Takes time proportional to the input length, but is usually at least a factor of four faster than actual decompression.- Throws:
IOException
-
isValidCompressedBuffer
Returns true iff the contents of compressed buffer [pos() ... limit()) can be uncompressed successfully. Does not return the uncompressed data. Takes time proportional to the input length, but is usually at least a factor of four faster than actual decompression.- Throws:
IOException
-
isValidCompressedBuffer
public static boolean isValidCompressedBuffer(long inputAddr, long offset, long length) throws IOException Returns true iff the contents of compressed buffer [offset, offset+length) can be uncompressed successfully. Does not return the uncompressed data. Takes time proportional to the input length, but is usually at least a factor of four faster than actual decompression.- Throws:
IOException
-
maxCompressedLength
public static int maxCompressedLength(int byteSize) Get the maximum byte size needed for compressing data of the given byte size.- Parameters:
byteSize
- byte size of the data to compress- Returns:
- maximum byte size of the compressed data
-
rawCompress
Zero-copy compress using memory addresses.- Parameters:
inputAddr
- input memory addressinputSize
- input byte sizedestAddr
- destination address of the compressed data- Returns:
- the compressed data size
- Throws:
IOException
-
rawUncompress
Zero-copy decompress using memory addresses.- Parameters:
inputAddr
- input memory addressinputSize
- input byte sizedestAddr
- destination address of the uncompressed data- Returns:
- the uncompressed data size
- Throws:
IOException
-
rawCompress
Compress the input data and produce a byte array of the uncompressed data- Parameters:
data
- input array. The input MUST be an array typebyteSize
- the input byte size- Returns:
- compressed data
- Throws:
IOException
-
rawCompress
public static int rawCompress(Object input, int inputOffset, int inputLength, byte[] output, int outputOffset) throws IOException Compress the input buffer [offset,... ,offset+length) contents, then write the compressed data to the output buffer[offset, ...)- Parameters:
input
- input array. This MUST be a primitive array typeinputOffset
- byte offset at the output arrayinputLength
- byte length of the input dataoutput
- output array. This MUST be a primitive array typeoutputOffset
- byte offset at the output array- Returns:
- byte size of the compressed data
- Throws:
IOException
-
rawUncompress
public static int rawUncompress(byte[] input, int inputOffset, int inputLength, Object output, int outputOffset) throws IOException Uncompress the content in the input buffer. The uncompressed data is written to the output buffer. Note that if you pass the wrong data or the range [inputOffset, inputOffset + inputLength) that cannot be uncompressed, your JVM might crash due to the access violation exception issued in the native code written in C++. To avoid this type of crash, useisValidCompressedBuffer(byte[], int, int)
first.- Parameters:
input
- input byte arrayinputOffset
- byte offset in the input byte arrayinputLength
- byte length of the input dataoutput
- output buffer, MUST be a primitive type arrayoutputOffset
- byte offset in the output buffer- Returns:
- the byte size of the uncompressed data
- Throws:
IOException
- when failed to uncompress the input data
-
uncompress
High-level API for uncompressing the input byte array.- Parameters:
input
-- Returns:
- the uncompressed byte array
- Throws:
IOException
-
uncompress
public static int uncompress(byte[] input, int inputOffset, int inputLength, byte[] output, int outputOffset) throws IOException Uncompress the content in the input buffer. The uncompressed data is written to the output buffer. Note that if you pass the wrong data or the range [inputOffset, inputOffset + inputLength) that cannot be uncompressed, your JVM might crash due to the access violation exception issued in the native code written in C++. To avoid this type of crash, useisValidCompressedBuffer(byte[], int, int)
first.- Parameters:
input
-inputOffset
-inputLength
-output
-outputOffset
-- Returns:
- the byte size of the uncompressed data
- Throws:
IOException
-
uncompress
Uncompress the content in the input buffer. The result is dumped to the specified output buffer. Note that if you pass the wrong data or the range [pos(), limit()) that cannot be uncompressed, your JVM might crash due to the access violation exception issued in the native code written in C++. To avoid this type of crash, useisValidCompressedBuffer(ByteBuffer)
first.- Parameters:
compressed
- buffer[pos() ... limit()) containing the input datauncompressed
- output of the the uncompressed data. It uses buffer[pos()..]- Returns:
- uncompressed data size
- Throws:
IOException
- when failed to uncompress the given inputSnappyError
- when the input is not a direct buffer
-
uncompressCharArray
Uncompress the input data as char array- Parameters:
input
-- Returns:
- the uncompressed data
- Throws:
IOException
-
uncompressCharArray
Uncompress the input[offset, .., offset+length) as a char array- Parameters:
input
-offset
-length
-- Returns:
- the uncompressed data
- Throws:
IOException
-
uncompressDoubleArray
Uncompress the input as a double array- Parameters:
input
-- Returns:
- the uncompressed data
- Throws:
IOException
-
uncompressDoubleArray
public static double[] uncompressDoubleArray(byte[] input, int offset, int length) throws IOException Uncompress the input as a double array- Parameters:
input
-offset
-length
-- Returns:
- the uncompressed data
- Throws:
IOException
-
uncompressedLength
Get the uncompressed byte size of the given compressed input. This operation takes O(1) time.- Parameters:
input
-- Returns:
- uncompressed byte size of the the given input data
- Throws:
IOException
- when failed to uncompress the given input. The error code isSnappyErrorCode.PARSING_ERROR
-
uncompressedLength
Get the uncompressed byte size of the given compressed input. This operation takes O(1) time.- Parameters:
input
-offset
-length
-- Returns:
- uncompressed byte size of the the given input data
- Throws:
IOException
- when failed to uncompress the given input. The error code isSnappyErrorCode.PARSING_ERROR
-
uncompressedLength
Get the uncompressed byte size of the given compressed input. This operation takes O(1) time.- Parameters:
compressed
- input data [pos() ... limit())- Returns:
- uncompressed byte length of the given input
- Throws:
IOException
- when failed to uncompress the given input. The error code isSnappyErrorCode.PARSING_ERROR
SnappyError
- when the input is not a direct buffer
-
uncompressedLength
Get the uncompressed byte size of the given compressed input. This operation takes O(1) time.- Parameters:
inputAddr
- compressed data addresslen
- byte length of the input- Returns:
- uncompressed byte length of the given input
- Throws:
IOException
- when failed to uncompress the given input. The error code isSnappyErrorCode.PARSING_ERROR
-
uncompressFloatArray
Uncompress the input as a float array- Parameters:
input
-- Returns:
- the uncompressed data
- Throws:
IOException
-
uncompressFloatArray
Uncompress the input[offset, offset+length) as a float array- Parameters:
input
-offset
-length
-- Returns:
- the uncompressed data
- Throws:
IOException
-
uncompressIntArray
Uncompress the input data as an int array- Parameters:
input
-- Returns:
- the uncompressed data
- Throws:
IOException
-
uncompressIntArray
Uncompress the input[offset, offset+length) as an int array- Parameters:
input
-offset
-length
-- Returns:
- the uncompressed data
- Throws:
IOException
-
uncompressLongArray
Uncompress the input data as a long array- Parameters:
input
-- Returns:
- the uncompressed data
- Throws:
IOException
-
uncompressLongArray
Uncompress the input[offset, offset+length) as a long array- Parameters:
input
-offset
-length
-- Returns:
- the uncompressed data
- Throws:
IOException
-
uncompressShortArray
Uncompress the input as a short array- Parameters:
input
-- Returns:
- the uncompressed data
- Throws:
IOException
-
uncompressShortArray
Uncompress the input[offset, offset+length) as a short array- Parameters:
input
-offset
-length
-- Returns:
- the uncompressed data
- Throws:
IOException
-
uncompressString
Uncompress the input as a String- Parameters:
input
-- Returns:
- the uncompressed dasta
- Throws:
IOException
-
uncompressString
Uncompress the input[offset, offset+length) as a String- Parameters:
input
-offset
-length
-- Returns:
- the uncompressed data
- Throws:
IOException
-
uncompressString
public static String uncompressString(byte[] input, int offset, int length, String encoding) throws IOException, UnsupportedEncodingException Uncompress the input[offset, offset+length) as a String of the given encoding- Parameters:
input
-offset
-length
-encoding
-- Returns:
- the uncompressed data
- Throws:
IOException
UnsupportedEncodingException
-
uncompressString
public static String uncompressString(byte[] input, int offset, int length, Charset encoding) throws IOException, UnsupportedEncodingException Uncompress the input[offset, offset+length) as a String of the given encoding- Parameters:
input
-offset
-length
-encoding
-- Returns:
- the uncompressed data
- Throws:
IOException
UnsupportedEncodingException
-
uncompressString
public static String uncompressString(byte[] input, String encoding) throws IOException, UnsupportedEncodingException Uncompress the input as a String of the given encoding- Parameters:
input
-encoding
-- Returns:
- the uncompressed data
- Throws:
IOException
UnsupportedEncodingException
-
uncompressString
public static String uncompressString(byte[] input, Charset encoding) throws IOException, UnsupportedEncodingException Uncompress the input as a String of the given encoding- Parameters:
input
-encoding
-- Returns:
- the uncompressed data
- Throws:
IOException
UnsupportedEncodingException
-