Index: src/test/org/apache/lucene/document/TestBinaryDocument.java =================================================================== --- src/test/org/apache/lucene/document/TestBinaryDocument.java (revision 756667) +++ src/test/org/apache/lucene/document/TestBinaryDocument.java (working copy) @@ -103,10 +103,12 @@ throws Exception { Fieldable binaryFldCompressed = new Field("binaryCompressed", CompressionTools.compress(binaryValCompressed.getBytes()), Field.Store.YES); + Fieldable stringFldCompressed = new Field("stringCompressed", CompressionTools.compressString(binaryValCompressed), Field.Store.YES); Document doc = new Document(); doc.add(binaryFldCompressed); + doc.add(stringFldCompressed); /** add the doc to a ram index */ MockRAMDirectory dir = new MockRAMDirectory(); @@ -122,7 +124,8 @@ /** fetch the binary compressed field and compare it's content with the original one */ String binaryFldCompressedTest = new String(CompressionTools.decompress(docFromReader.getBinaryValue("binaryCompressed"))); assertTrue(binaryFldCompressedTest.equals(binaryValCompressed)); - + assertTrue(CompressionTools.decompressString(docFromReader.getBinaryValue("stringCompressed")).equals(binaryValCompressed)); + reader.close(); dir.close(); } Index: src/java/org/apache/lucene/document/CompressionTools.java =================================================================== --- src/java/org/apache/lucene/document/CompressionTools.java (revision 756667) +++ src/java/org/apache/lucene/document/CompressionTools.java (working copy) @@ -21,21 +21,14 @@ import java.util.zip.Inflater; import java.util.zip.DataFormatException; import java.io.ByteArrayOutputStream; +import java.io.UnsupportedEncodingException; /** Simple utility class providing static methods to * compress and decompress binary data for stored fields. * This class uses java.util.zip.Deflater and Inflater - * classes to compress and decompress. - * - * To compress a String: - *
- * String string = ...
- * byte[] bytes = compress(string.getBytes("UTF-8");
- *
- * and to decompress:
- * - * new String(decompress(bytes), "UTF-8"); - *+ * classes to compress and decompress, which is the same + * format previously used by the now deprecated + * Field.Store.COMPRESS. */ public class CompressionTools { @@ -84,6 +77,25 @@ return compress(value, 0, value.length, Deflater.BEST_COMPRESSION); } + /** Compresses the String value, with default BEST_COMPRESSION level */ + public static byte[] compressString(String value) { + return compressString(value, Deflater.BEST_COMPRESSION); + } + + /** Compresses the String value using the specified + * compressionLevel (constants are defined in + * java.util.zip.Deflater). */ + public static byte[] compressString(String value, int compressionLevel) { + final byte[] bytes; + try { + bytes = value.getBytes("UTF-8"); + } catch (UnsupportedEncodingException uee) { + return null; + } + + return compress(bytes, 0, bytes.length, compressionLevel); + } + /** Decompress the byte array previously returned by * compress */ public static byte[] decompress(byte[] value) throws DataFormatException { @@ -107,4 +119,15 @@ return bos.toByteArray(); } + + /** Decompress the byte array previously returned by + * compressString back into a String */ + public static String decompressString(byte[] value) throws DataFormatException { + byte[] bytes = decompress(value); + try { + return new String(bytes, "UTF-8"); + } catch (UnsupportedEncodingException uee) { + return null; + } + } }