Snappy compressor/decompressor for Java
Go to file
Trevor Robinson 13cc8c3df2 Added win64 cross-compile target to makefile
Changed win32 and win64 tool variables to use CROSS_PREFIX,
since the prefix varies depending on the host system.
2012-09-06 19:15:12 -05:00
.settings add SnappyException/SnappyError 2011-03-30 15:26:53 +09:00
lib Upgrade to snappy-1.0.5. Support building in Max OS X Lion 2012-05-25 10:23:26 +09:00
src Added armhf shared library 2012-09-06 18:15:07 -05:00
.gitignore Add .gitignore 2012-09-06 10:29:58 +09:00
INSTALL Fixes issue 26. Add note on using configuration file and license of the embedded libstdc++ library (GCC Runtime Library Exception) 2011-08-23 12:05:19 +09:00
LICENSE add license notes 2011-03-30 18:17:16 +09:00
Makefile Added win64 cross-compile target to makefile 2012-09-06 19:15:12 -05:00
Makefile.common Added win64 cross-compile target to makefile 2012-09-06 19:15:12 -05:00
Makefile.package Add google code upload script 2011-10-05 11:05:21 +09:00
Milestone.md Add milestone 2012-09-06 10:44:19 +09:00
NOTICE Fixes issue 26. Add note on using configuration file and license of the embedded libstdc++ library (GCC Runtime Library Exception) 2011-08-23 12:05:19 +09:00
README.md Fix link 2012-09-06 11:49:49 +09:00
googlecode_upload.py Add google code upload script 2011-10-05 11:05:21 +09:00
pom.xml Disable pushing changes to repo when releasing. This fix is for using git-flow with maven release plugin 2012-09-06 12:57:03 +09:00
stylesheet.css Fixes issue 29 Javadoc 2011-09-22 16:39:51 +09:00

README.md

The snappy-java is a Java port of the snappy http://code.google.com/p/snappy/, a fast C++ compresser/decompresser developed by Google.

Features

  • Apache License Version 2.0. Free for both commercial and non-commercial use.
  • Fast compression/decompression tailored to 64-bit CPU architecture.
  • JNI-based implementation to achieve comparable performance to the native C++ version.
    • Although snappy-java uses JNI, it can be used safely with multiple class loaders (e.g. Tomcat, etc.).
  • Portable across various operating systems; Snappy-java contains native libraries built for Window/Mac/Linux (32/64-bit). At runtime, snappy-java loads one of these libraries according to your machine environment (It looks system properties, os.name and os.arch).
  • Simple usage. Add the snappy-java-(version).jar file to your classpath. Then call compression/decompression methods in org.xerial.snappy.Snappy.

Performance

Download

The current stable version is available from here:

If you are a Maven user, see [#Using_with_Maven]

Usage

First, import org.xerial.snapy.Snappy in your Java code:

   import org.xerial.snappy.Snappy;

Then use Snappy.compress(byte[]) and Snappy.uncompress(byte[]):

 String input = "Hello snappy-java! Snappy-java is a JNI-based wrapper of "
 + "Snappy, a fast compresser/decompresser.";
 byte[] compressed = Snappy.compress(input.getBytes("UTF-8"));
 byte[] uncompressed = Snappy.uncompress(compressed);
 
 String result = new String(uncompressed, "UTF-8");
 System.out.println(result);

In addition, high-level methods (Snappy.compress(String), Snappy.compress(float[] ..) etc. ) and low-level ones (e.g. Snappy.rawCompress(.. ), Snappy.rawUncompress(..), etc.), which minimize memory copies, can be used. See also Snappy.java

Stream-based API

Stream-based compressor/decompressor SnappyOutputStream/SnappyInputStream are also available for reading/writing large data sets.

Setting classpath

If you have snappy-java-(VERSION).jar in the current directory, use -classpath option as follows:

$ javac -classpath ".;snappy-java-(VERSION).jar" Sample.java  # in Windows
or 
$ javac -classpath ".:snappy-java-(VERSION).jar" Sample.java  # in Mac or Linux

Using with Maven

Add the following dependency to your pom.xml:

<dependency>
  <groupId>org.xerial.snappy</groupId>
  <artifactId>snappy-java</artifactId>
  <version>(version)</version>
  <type>jar</type>
  <scope>compile</scope>
</dependency>

Public discussion group

Post bug reports or feature request to the Issue Tracker: https://github.com/xerial/snappy-java/issues

Public discussion forum is here: <http://groups.google.com/group/xerial?hl=en Xerial Public Discussion Group>

Building from the source code

See the installation instruction. Building from the source code is an option when your OS platform and CPU architecture is not supported. To build snappy-java, you need Git, JDK (1.6 or higher), Maven (3.x or higher is required), g++ compiler (mingw in Windows) etc.

$ git clone https://github.com/xerial/snappy-java.git
$ cd snappy-java
$ make

A file target/snappy-java-$(version).jar is the product additionally containing the native library built for your platform.

Miscellaneous Notes

Using snappy-java with Tomcat 6 (or higher) Web Server

Simply put the snappy-java's jar to WEB-INF/lib folder of your web application. Usual JNI-library specific problem no longer exists since snappy-java version 1.0.3 or higher can be loaded by multiple class loaders in the same JVM by using native code injection to the parent class loader (Issue 21).


Snappy-java is developed by Taro L. Saito. Twitter @taroleo