Class Snappy


  • public class Snappy
    extends java.lang.Object
    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 
      Modifier and Type Field Description
      private static SnappyNative impl
      An instance of SnappyNative
    • Constructor Summary

      Constructors 
      Constructor Description
      Snappy()  
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static void arrayCopy​(java.lang.Object src, int offset, int byteLength, java.lang.Object dest, int dest_offset)
      Copy bytes from source to destination
      static 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 array
      static byte[] compress​(double[] input)
      Compress the input double array
      static byte[] compress​(float[] input)
      Compress the input float array
      static byte[] compress​(int[] input)
      Compress the input int array
      static byte[] compress​(long[] input)
      Compress the input long array
      static byte[] compress​(short[] input)
      Compress the input short array
      static byte[] compress​(java.lang.String s)
      Compress the input String
      static byte[] compress​(java.lang.String s, java.lang.String encoding)
      Compress the input string using the given encoding
      static byte[] compress​(java.lang.String s, java.nio.charset.Charset encoding)
      Compress the input string using the given encoding
      static int compress​(java.nio.ByteBuffer uncompressed, java.nio.ByteBuffer compressed)
      Compress the content in the given input buffer.
      static java.lang.String getNativeLibraryVersion()
      Get the native library version of the snappy
      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​(java.nio.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​(java.lang.Object data, int byteSize)
      Compress the input data and produce a byte array of the uncompressed data
      static int rawCompress​(java.lang.Object input, int inputOffset, int inputLength, byte[] output, int outputOffset)
      Compress the input buffer [offset,...
      static int rawUncompress​(byte[] input, int inputOffset, int inputLength, java.lang.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​(java.nio.ByteBuffer compressed, java.nio.ByteBuffer uncompressed)
      Uncompress the content in the input buffer.
      static char[] uncompressCharArray​(byte[] input)
      Uncompress the input data as char array
      static char[] uncompressCharArray​(byte[] input, int offset, int length)
      Uncompress the input[offset, .., offset+length) as a char array
      static double[] uncompressDoubleArray​(byte[] input)
      Uncompress the input as a double array
      static 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​(java.nio.ByteBuffer compressed)
      Get the uncompressed byte size of the given compressed input.
      static float[] uncompressFloatArray​(byte[] input)
      Uncompress the input as a float array
      static float[] uncompressFloatArray​(byte[] input, int offset, int length)
      Uncompress the input[offset, offset+length) as a float array
      static int[] uncompressIntArray​(byte[] input)
      Uncompress the input data as an int array
      static int[] uncompressIntArray​(byte[] input, int offset, int length)
      Uncompress the input[offset, offset+length) as an int array
      static long[] uncompressLongArray​(byte[] input)
      Uncompress the input data as a long array
      static long[] uncompressLongArray​(byte[] input, int offset, int length)
      Uncompress the input[offset, offset+length) as a long array
      static short[] uncompressShortArray​(byte[] input)
      Uncompress the input as a short array
      static short[] uncompressShortArray​(byte[] input, int offset, int length)
      Uncompress the input[offset, offset+length) as a short array
      static java.lang.String uncompressString​(byte[] input)
      Uncompress the input as a String
      static java.lang.String uncompressString​(byte[] input, int offset, int length)
      Uncompress the input[offset, offset+length) as a String
      static java.lang.String uncompressString​(byte[] input, int offset, int length, java.lang.String encoding)
      Uncompress the input[offset, offset+length) as a String of the given encoding
      static java.lang.String uncompressString​(byte[] input, int offset, int length, java.nio.charset.Charset encoding)
      Uncompress the input[offset, offset+length) as a String of the given encoding
      static java.lang.String uncompressString​(byte[] input, java.lang.String encoding)
      Uncompress the input as a String of the given encoding
      static java.lang.String uncompressString​(byte[] input, java.nio.charset.Charset encoding)
      Uncompress the input as a String of the given encoding
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • impl

        private static SnappyNative impl
        An instance of SnappyNative
    • Constructor Detail

      • Snappy

        public Snappy()
    • Method Detail

      • 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.
      • arrayCopy

        public static void arrayCopy​(java.lang.Object src,
                                     int offset,
                                     int byteLength,
                                     java.lang.Object dest,
                                     int dest_offset)
                              throws java.io.IOException
        Copy bytes from source to destination
        Parameters:
        src - pointer to the source array
        offset - byte offset in the source array
        byteLength - the number of bytes to copy
        dest - pointer to the destination array
        dest_offset - byte offset in the destination array
        Throws:
        java.io.IOException
      • compress

        public static byte[] compress​(byte[] input)
                               throws java.io.IOException
        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, use compress(byte[], int, int, byte[], int) or compress(ByteBuffer, ByteBuffer).
        Parameters:
        input - the input data
        Returns:
        the compressed byte array
        Throws:
        java.io.IOException
      • compress

        public static int compress​(byte[] input,
                                   int inputOffset,
                                   int inputLength,
                                   byte[] output,
                                   int outputOffset)
                            throws java.io.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:
        java.io.IOException - when failed to access the input/output buffer
      • compress

        public static int compress​(java.nio.ByteBuffer uncompressed,
                                   java.nio.ByteBuffer compressed)
                            throws java.io.IOException
        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 data
        compressed - output of the compressed data. Uses range [pos()..].
        Returns:
        byte size of the compressed data.
        Throws:
        SnappyError - when the input is not a direct buffer
        java.io.IOException
      • compress

        public static byte[] compress​(char[] input)
                               throws java.io.IOException
        Compress the input char array
        Parameters:
        input -
        Returns:
        the compressed data
        Throws:
        java.io.IOException
      • compress

        public static byte[] compress​(double[] input)
                               throws java.io.IOException
        Compress the input double array
        Parameters:
        input -
        Returns:
        the compressed data
        Throws:
        java.io.IOException
      • compress

        public static byte[] compress​(float[] input)
                               throws java.io.IOException
        Compress the input float array
        Parameters:
        input -
        Returns:
        the compressed data
        Throws:
        java.io.IOException
      • compress

        public static byte[] compress​(int[] input)
                               throws java.io.IOException
        Compress the input int array
        Parameters:
        input -
        Returns:
        the compressed data
        Throws:
        java.io.IOException
      • compress

        public static byte[] compress​(long[] input)
                               throws java.io.IOException
        Compress the input long array
        Parameters:
        input -
        Returns:
        the compressed data
        Throws:
        java.io.IOException
      • compress

        public static byte[] compress​(short[] input)
                               throws java.io.IOException
        Compress the input short array
        Parameters:
        input -
        Returns:
        the compressed data
        Throws:
        java.io.IOException
      • compress

        public static byte[] compress​(java.lang.String s)
                               throws java.io.IOException
        Compress the input String
        Parameters:
        s -
        Returns:
        the compressed data
        Throws:
        java.io.IOException
      • compress

        public static byte[] compress​(java.lang.String s,
                                      java.lang.String encoding)
                               throws java.io.UnsupportedEncodingException,
                                      java.io.IOException
        Compress the input string using the given encoding
        Parameters:
        s -
        encoding -
        Returns:
        the compressed data
        Throws:
        java.io.UnsupportedEncodingException
        java.io.IOException
      • compress

        public static byte[] compress​(java.lang.String s,
                                      java.nio.charset.Charset encoding)
                               throws java.io.IOException
        Compress the input string using the given encoding
        Parameters:
        s -
        encoding -
        Returns:
        the compressed data
        Throws:
        java.io.UnsupportedEncodingException
        java.io.IOException
      • getNativeLibraryVersion

        public static java.lang.String 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 java.io.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:
        java.io.IOException
      • isValidCompressedBuffer

        public static boolean isValidCompressedBuffer​(byte[] input)
                                               throws java.io.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:
        java.io.IOException
      • isValidCompressedBuffer

        public static boolean isValidCompressedBuffer​(java.nio.ByteBuffer compressed)
                                               throws java.io.IOException
        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:
        java.io.IOException
      • isValidCompressedBuffer

        public static boolean isValidCompressedBuffer​(long inputAddr,
                                                      long offset,
                                                      long length)
                                               throws java.io.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:
        java.io.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

        public static long rawCompress​(long inputAddr,
                                       long inputSize,
                                       long destAddr)
                                throws java.io.IOException
        Zero-copy compress using memory addresses.
        Parameters:
        inputAddr - input memory address
        inputSize - input byte size
        destAddr - destination address of the compressed data
        Returns:
        the compressed data size
        Throws:
        java.io.IOException
      • rawUncompress

        public static long rawUncompress​(long inputAddr,
                                         long inputSize,
                                         long destAddr)
                                  throws java.io.IOException
        Zero-copy decompress using memory addresses.
        Parameters:
        inputAddr - input memory address
        inputSize - input byte size
        destAddr - destination address of the uncompressed data
        Returns:
        the uncompressed data size
        Throws:
        java.io.IOException
      • rawCompress

        public static byte[] rawCompress​(java.lang.Object data,
                                         int byteSize)
                                  throws java.io.IOException
        Compress the input data and produce a byte array of the uncompressed data
        Parameters:
        data - input array. The input MUST be an array type
        byteSize - the input byte size
        Returns:
        compressed data
        Throws:
        java.io.IOException
      • rawCompress

        public static int rawCompress​(java.lang.Object input,
                                      int inputOffset,
                                      int inputLength,
                                      byte[] output,
                                      int outputOffset)
                               throws java.io.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 type
        inputOffset - byte offset at the output array
        inputLength - byte length of the input data
        output - output array. This MUST be a primitive array type
        outputOffset - byte offset at the output array
        Returns:
        byte size of the compressed data
        Throws:
        java.io.IOException
      • rawUncompress

        public static int rawUncompress​(byte[] input,
                                        int inputOffset,
                                        int inputLength,
                                        java.lang.Object output,
                                        int outputOffset)
                                 throws java.io.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, use isValidCompressedBuffer(byte[], int, int) first.

        Parameters:
        input - input byte array
        inputOffset - byte offset in the input byte array
        inputLength - byte length of the input data
        output - output buffer, MUST be a primitive type array
        outputOffset - byte offset in the output buffer
        Returns:
        the byte size of the uncompressed data
        Throws:
        java.io.IOException - when failed to uncompress the input data
      • uncompress

        public static byte[] uncompress​(byte[] input)
                                 throws java.io.IOException
        High-level API for uncompressing the input byte array.
        Parameters:
        input -
        Returns:
        the uncompressed byte array
        Throws:
        java.io.IOException
      • uncompress

        public static int uncompress​(byte[] input,
                                     int inputOffset,
                                     int inputLength,
                                     byte[] output,
                                     int outputOffset)
                              throws java.io.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, use isValidCompressedBuffer(byte[], int, int) first.

        Parameters:
        input -
        inputOffset -
        inputLength -
        output -
        outputOffset -
        Returns:
        the byte size of the uncompressed data
        Throws:
        java.io.IOException
      • uncompress

        public static int uncompress​(java.nio.ByteBuffer compressed,
                                     java.nio.ByteBuffer uncompressed)
                              throws java.io.IOException
        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, use isValidCompressedBuffer(ByteBuffer) first.

        Parameters:
        compressed - buffer[pos() ... limit()) containing the input data
        uncompressed - output of the the uncompressed data. It uses buffer[pos()..]
        Returns:
        uncompressed data size
        Throws:
        java.io.IOException - when failed to uncompress the given input
        SnappyError - when the input is not a direct buffer
      • uncompressCharArray

        public static char[] uncompressCharArray​(byte[] input)
                                          throws java.io.IOException
        Uncompress the input data as char array
        Parameters:
        input -
        Returns:
        the uncompressed data
        Throws:
        java.io.IOException
      • uncompressCharArray

        public static char[] uncompressCharArray​(byte[] input,
                                                 int offset,
                                                 int length)
                                          throws java.io.IOException
        Uncompress the input[offset, .., offset+length) as a char array
        Parameters:
        input -
        offset -
        length -
        Returns:
        the uncompressed data
        Throws:
        java.io.IOException
      • uncompressDoubleArray

        public static double[] uncompressDoubleArray​(byte[] input)
                                              throws java.io.IOException
        Uncompress the input as a double array
        Parameters:
        input -
        Returns:
        the uncompressed data
        Throws:
        java.io.IOException
      • uncompressedLength

        public static int uncompressedLength​(byte[] input)
                                      throws java.io.IOException
        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:
        java.io.IOException - when failed to uncompress the given input. The error code is SnappyErrorCode.PARSING_ERROR
      • uncompressedLength

        public static int uncompressedLength​(byte[] input,
                                             int offset,
                                             int length)
                                      throws java.io.IOException
        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:
        java.io.IOException - when failed to uncompress the given input. The error code is SnappyErrorCode.PARSING_ERROR
      • uncompressedLength

        public static int uncompressedLength​(java.nio.ByteBuffer compressed)
                                      throws java.io.IOException
        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:
        java.io.IOException - when failed to uncompress the given input. The error code is SnappyErrorCode.PARSING_ERROR
        SnappyError - when the input is not a direct buffer
      • uncompressedLength

        public static long uncompressedLength​(long inputAddr,
                                              long len)
                                       throws java.io.IOException
        Get the uncompressed byte size of the given compressed input. This operation takes O(1) time.
        Parameters:
        inputAddr - compressed data address
        len - byte length of the input
        Returns:
        uncompressed byte length of the given input
        Throws:
        java.io.IOException - when failed to uncompress the given input. The error code is SnappyErrorCode.PARSING_ERROR
      • uncompressFloatArray

        public static float[] uncompressFloatArray​(byte[] input)
                                            throws java.io.IOException
        Uncompress the input as a float array
        Parameters:
        input -
        Returns:
        the uncompressed data
        Throws:
        java.io.IOException
      • uncompressFloatArray

        public static float[] uncompressFloatArray​(byte[] input,
                                                   int offset,
                                                   int length)
                                            throws java.io.IOException
        Uncompress the input[offset, offset+length) as a float array
        Parameters:
        input -
        offset -
        length -
        Returns:
        the uncompressed data
        Throws:
        java.io.IOException
      • uncompressIntArray

        public static int[] uncompressIntArray​(byte[] input)
                                        throws java.io.IOException
        Uncompress the input data as an int array
        Parameters:
        input -
        Returns:
        the uncompressed data
        Throws:
        java.io.IOException
      • uncompressIntArray

        public static int[] uncompressIntArray​(byte[] input,
                                               int offset,
                                               int length)
                                        throws java.io.IOException
        Uncompress the input[offset, offset+length) as an int array
        Parameters:
        input -
        offset -
        length -
        Returns:
        the uncompressed data
        Throws:
        java.io.IOException
      • uncompressLongArray

        public static long[] uncompressLongArray​(byte[] input)
                                          throws java.io.IOException
        Uncompress the input data as a long array
        Parameters:
        input -
        Returns:
        the uncompressed data
        Throws:
        java.io.IOException
      • uncompressLongArray

        public static long[] uncompressLongArray​(byte[] input,
                                                 int offset,
                                                 int length)
                                          throws java.io.IOException
        Uncompress the input[offset, offset+length) as a long array
        Parameters:
        input -
        offset -
        length -
        Returns:
        the uncompressed data
        Throws:
        java.io.IOException
      • uncompressShortArray

        public static short[] uncompressShortArray​(byte[] input)
                                            throws java.io.IOException
        Uncompress the input as a short array
        Parameters:
        input -
        Returns:
        the uncompressed data
        Throws:
        java.io.IOException
      • uncompressShortArray

        public static short[] uncompressShortArray​(byte[] input,
                                                   int offset,
                                                   int length)
                                            throws java.io.IOException
        Uncompress the input[offset, offset+length) as a short array
        Parameters:
        input -
        offset -
        length -
        Returns:
        the uncompressed data
        Throws:
        java.io.IOException
      • uncompressString

        public static java.lang.String uncompressString​(byte[] input)
                                                 throws java.io.IOException
        Uncompress the input as a String
        Parameters:
        input -
        Returns:
        the uncompressed dasta
        Throws:
        java.io.IOException
      • uncompressString

        public static java.lang.String uncompressString​(byte[] input,
                                                        int offset,
                                                        int length)
                                                 throws java.io.IOException
        Uncompress the input[offset, offset+length) as a String
        Parameters:
        input -
        offset -
        length -
        Returns:
        the uncompressed data
        Throws:
        java.io.IOException
      • uncompressString

        public static java.lang.String uncompressString​(byte[] input,
                                                        int offset,
                                                        int length,
                                                        java.lang.String encoding)
                                                 throws java.io.IOException,
                                                        java.io.UnsupportedEncodingException
        Uncompress the input[offset, offset+length) as a String of the given encoding
        Parameters:
        input -
        offset -
        length -
        encoding -
        Returns:
        the uncompressed data
        Throws:
        java.io.IOException
        java.io.UnsupportedEncodingException
      • uncompressString

        public static java.lang.String uncompressString​(byte[] input,
                                                        int offset,
                                                        int length,
                                                        java.nio.charset.Charset encoding)
                                                 throws java.io.IOException,
                                                        java.io.UnsupportedEncodingException
        Uncompress the input[offset, offset+length) as a String of the given encoding
        Parameters:
        input -
        offset -
        length -
        encoding -
        Returns:
        the uncompressed data
        Throws:
        java.io.IOException
        java.io.UnsupportedEncodingException
      • uncompressString

        public static java.lang.String uncompressString​(byte[] input,
                                                        java.lang.String encoding)
                                                 throws java.io.IOException,
                                                        java.io.UnsupportedEncodingException
        Uncompress the input as a String of the given encoding
        Parameters:
        input -
        encoding -
        Returns:
        the uncompressed data
        Throws:
        java.io.IOException
        java.io.UnsupportedEncodingException
      • uncompressString

        public static java.lang.String uncompressString​(byte[] input,
                                                        java.nio.charset.Charset encoding)
                                                 throws java.io.IOException,
                                                        java.io.UnsupportedEncodingException
        Uncompress the input as a String of the given encoding
        Parameters:
        input -
        encoding -
        Returns:
        the uncompressed data
        Throws:
        java.io.IOException
        java.io.UnsupportedEncodingException