diff --git a/src/main/java/org/xerial/snappy/Snappy.java b/src/main/java/org/xerial/snappy/Snappy.java index 103553f..33744ec 100755 --- a/src/main/java/org/xerial/snappy/Snappy.java +++ b/src/main/java/org/xerial/snappy/Snappy.java @@ -24,6 +24,7 @@ //-------------------------------------- package org.xerial.snappy; +import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; /** @@ -87,6 +88,20 @@ public class Snappy return rawCompress(input, input.length * 8); // double use 8 bytes } + public static byte[] compress(String s, String encoding) throws UnsupportedEncodingException, SnappyException { + byte[] data = s.getBytes(encoding); + return compress(data); + } + + public static byte[] compress(String s) throws SnappyException { + try { + return compress(s, "UTF-8"); + } + catch (UnsupportedEncodingException e) { + throw new IllegalStateException("UTF-8 encoder is not found"); + } + } + /** * Compress the input data and produce an output array * @@ -120,7 +135,7 @@ public class Snappy return result; } - public static short[] uncompressShort(byte[] input) throws SnappyException { + public static short[] uncompressShortArray(byte[] input) throws SnappyException { int uncompressedLength = Snappy.uncompressedLength(input, 0, input.length); short[] result = new short[uncompressedLength / 2]; int byteSize = SnappyNative.rawUncompress(input, 0, input.length, result, 0); @@ -129,7 +144,7 @@ public class Snappy return result; } - public static char[] uncompressChar(byte[] input) throws SnappyException { + public static char[] uncompressCharArray(byte[] input) throws SnappyException { int uncompressedLength = Snappy.uncompressedLength(input, 0, input.length); char[] result = new char[uncompressedLength / 2]; int byteSize = SnappyNative.rawUncompress(input, 0, input.length, result, 0); @@ -138,7 +153,7 @@ public class Snappy return result; } - public static int[] uncompressInt(byte[] input) throws SnappyException { + public static int[] uncompressIntArray(byte[] input) throws SnappyException { int uncompressedLength = Snappy.uncompressedLength(input, 0, input.length); int[] result = new int[uncompressedLength / 4]; int byteSize = SnappyNative.rawUncompress(input, 0, input.length, result, 0); @@ -147,7 +162,7 @@ public class Snappy return result; } - public static float[] uncompressFloat(byte[] input) throws SnappyException { + public static float[] uncompressFloatArray(byte[] input) throws SnappyException { int uncompressedLength = Snappy.uncompressedLength(input, 0, input.length); float[] result = new float[uncompressedLength / 4]; int byteSize = SnappyNative.rawUncompress(input, 0, input.length, result, 0); @@ -156,7 +171,7 @@ public class Snappy return result; } - public static long[] uncompressLong(byte[] input) throws SnappyException { + public static long[] uncompressLongArray(byte[] input) throws SnappyException { int uncompressedLength = Snappy.uncompressedLength(input, 0, input.length); long[] result = new long[uncompressedLength / 8]; int byteSize = SnappyNative.rawUncompress(input, 0, input.length, result, 0); @@ -165,7 +180,7 @@ public class Snappy return result; } - public static double[] uncompressDouble(byte[] input) throws SnappyException { + public static double[] uncompressDoubleArray(byte[] input) throws SnappyException { int uncompressedLength = Snappy.uncompressedLength(input, 0, input.length); double[] result = new double[uncompressedLength / 8]; int byteSize = SnappyNative.rawUncompress(input, 0, input.length, result, 0); @@ -174,6 +189,21 @@ public class Snappy return result; } + public static String uncompressString(byte[] input, String encoding) throws SnappyException, + UnsupportedEncodingException { + byte[] uncompressed = uncompress(input); + return new String(uncompressed, encoding); + } + + public static String uncompressString(byte[] input) throws SnappyException { + try { + return uncompressString(input, "UTF-8"); + } + catch (UnsupportedEncodingException e) { + throw new IllegalStateException("UTF-8 decoder is not found"); + } + } + /** * Compress the content in the given input buffer. After the compression, * you can retrieve the compressed data from the output buffer [pos() ... diff --git a/src/test/java/org/xerial/snappy/SnappyTest.java b/src/test/java/org/xerial/snappy/SnappyTest.java index e1c7327..bb4f146 100755 --- a/src/test/java/org/xerial/snappy/SnappyTest.java +++ b/src/test/java/org/xerial/snappy/SnappyTest.java @@ -230,7 +230,7 @@ public class SnappyTest public void floatArray() throws Exception { float[] data = new float[] { 1.0f, -0.3f, 1.3f, 234.4f, 34 }; byte[] compressed = Snappy.compress(data); - float[] result = Snappy.uncompressFloat(compressed); + float[] result = Snappy.uncompressFloatArray(compressed); assertArrayEquals(data, result, 0.0f); } @@ -238,7 +238,7 @@ public class SnappyTest public void doubleArray() throws Exception { double[] data = new double[] { 1.0, -0.3, 1.3, 234.4, 34 }; byte[] compressed = Snappy.compress(data); - double[] result = Snappy.uncompressDouble(compressed); + double[] result = Snappy.uncompressDoubleArray(compressed); assertArrayEquals(data, result, 0.0f); } @@ -246,7 +246,7 @@ public class SnappyTest public void longArray() throws Exception { long[] data = new long[] { 2, 3, 15, 4234, 43251531412342342L, 23423422342L }; byte[] compressed = Snappy.compress(data); - long[] result = Snappy.uncompressLong(compressed); + long[] result = Snappy.uncompressLongArray(compressed); assertArrayEquals(data, result); } @@ -254,7 +254,7 @@ public class SnappyTest public void shortArray() throws Exception { short[] data = new short[] { 432, -32267, 1, 3, 34, 43, 34, Short.MAX_VALUE, -1 }; byte[] compressed = Snappy.compress(data); - short[] result = Snappy.uncompressShort(compressed); + short[] result = Snappy.uncompressShortArray(compressed); assertArrayEquals(data, result); } @@ -262,7 +262,7 @@ public class SnappyTest public void intArray() throws Exception { int[] data = new int[] { 432, -32267, 1, 3, 34, 43, 34, Short.MAX_VALUE, -1, Integer.MAX_VALUE, 3424, 43 }; byte[] compressed = Snappy.compress(data); - int[] result = Snappy.uncompressInt(compressed); + int[] result = Snappy.uncompressIntArray(compressed); assertArrayEquals(data, result); } @@ -270,8 +270,16 @@ public class SnappyTest public void charArray() throws Exception { char[] data = new char[] { 'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!' }; byte[] compressed = Snappy.compress(data); - char[] result = Snappy.uncompressChar(compressed); + char[] result = Snappy.uncompressCharArray(compressed); assertArrayEquals(data, result); } + @Test + public void string() throws Exception { + String s = "Hello Snappy! Snappy! Snappy!"; + byte[] compressed = Snappy.compress(s); + String uncompressedString = Snappy.uncompressString(compressed); + assertEquals(s, uncompressedString); + } + }