Repository: commons-compress
Updated Branches:
  refs/heads/master 043f42b65 -> ad661a8d3


allow LZ77 tuning in framed snappy/lz4 streams as well


Project: http://git-wip-us.apache.org/repos/asf/commons-compress/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-compress/commit/ad661a8d
Tree: http://git-wip-us.apache.org/repos/asf/commons-compress/tree/ad661a8d
Diff: http://git-wip-us.apache.org/repos/asf/commons-compress/diff/ad661a8d

Branch: refs/heads/master
Commit: ad661a8d347c1c0ff1b9264cf0f8c89de7057a69
Parents: 043f42b
Author: Stefan Bodewig <bode...@apache.org>
Authored: Sun Mar 26 18:55:34 2017 +0200
Committer: Stefan Bodewig <bode...@apache.org>
Committed: Sun Mar 26 18:55:34 2017 +0200

----------------------------------------------------------------------
 .../lz4/FramedLZ4CompressorOutputStream.java    | 36 +++++++++++++++++++-
 .../FramedSnappyCompressorOutputStream.java     | 16 ++++++++-
 .../lz4/FramedLZ4CompressorRoundtripTest.java   |  4 +++
 3 files changed, 54 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-compress/blob/ad661a8d/src/main/java/org/apache/commons/compress/compressors/lz4/FramedLZ4CompressorOutputStream.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/compress/compressors/lz4/FramedLZ4CompressorOutputStream.java
 
b/src/main/java/org/apache/commons/compress/compressors/lz4/FramedLZ4CompressorOutputStream.java
index 3ebcaa0..c08914f 100644
--- 
a/src/main/java/org/apache/commons/compress/compressors/lz4/FramedLZ4CompressorOutputStream.java
+++ 
b/src/main/java/org/apache/commons/compress/compressors/lz4/FramedLZ4CompressorOutputStream.java
@@ -88,6 +88,7 @@ public class FramedLZ4CompressorOutputStream extends 
CompressorOutputStream {
     public static class Parameters {
         private final BlockSize blockSize;
         private final boolean withContentChecksum, withBlockChecksum, 
withBlockDependency;
+        private final 
org.apache.commons.compress.compressors.lz77support.Parameters lz77params;
 
         /**
          * The default parameters of 4M block size, enabled content
@@ -107,6 +108,16 @@ public class FramedLZ4CompressorOutputStream extends 
CompressorOutputStream {
             this(blockSize, true, false, false);
         }
         /**
+         * Sets up custom a custom block size for the LZ4 stream but
+         * otherwise uses the defaults of enabled content checksum,
+         * disabled block checksums and independent blocks.
+         * @param blockSize the size of a single block.
+         */
+        public Parameters(BlockSize blockSize,
+            org.apache.commons.compress.compressors.lz77support.Parameters 
lz77params) {
+            this(blockSize, true, false, false, lz77params);
+        }
+        /**
          * Sets up custom parameters for the LZ4 stream.
          * @param blockSize the size of a single block.
          * @param withContentChecksum whether to write a content checksum
@@ -120,10 +131,33 @@ public class FramedLZ4CompressorOutputStream extends 
CompressorOutputStream {
          */
         public Parameters(BlockSize blockSize, boolean withContentChecksum, 
boolean withBlockChecksum,
             boolean withBlockDependency) {
+            this(blockSize, withContentChecksum, withBlockChecksum, 
withBlockDependency,
+                 
BlockLZ4CompressorOutputStream.createParameterBuilder().build());
+        }
+
+        /**
+         * Sets up custom parameters for the LZ4 stream.
+         * @param blockSize the size of a single block.
+         * @param withContentChecksum whether to write a content checksum
+         * @param withBlockChecksum whether to write a block checksum.
+         * Note that block checksums are not supported by the lz4
+         * command line utility
+         * @param withBlockDependency whether a block may depend on
+         * the content of a previous block. Enabling this may improve
+         * compression ratio but makes it impossible to decompress the
+         * output in parallel.
+         * @param lz77 parameters parameters used to fine-tune
+         * compression, in particular to balance compression ration vs
+         * compression speed.
+         */
+        public Parameters(BlockSize blockSize, boolean withContentChecksum, 
boolean withBlockChecksum,
+                boolean withBlockDependency,
+                org.apache.commons.compress.compressors.lz77support.Parameters 
lz77params) {
             this.blockSize = blockSize;
             this.withContentChecksum = withContentChecksum;
             this.withBlockChecksum = withBlockChecksum;
             this.withBlockDependency = withBlockDependency;
+            this.lz77params = lz77params;
         }
 
         @Override
@@ -231,7 +265,7 @@ public class FramedLZ4CompressorOutputStream extends 
CompressorOutputStream {
     private void flushBlock() throws IOException {
         final boolean withBlockDependency = params.withBlockDependency;
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        try (BlockLZ4CompressorOutputStream o = new 
BlockLZ4CompressorOutputStream(baos)) {
+        try (BlockLZ4CompressorOutputStream o = new 
BlockLZ4CompressorOutputStream(baos, params.lz77params)) {
             if (withBlockDependency) {
                 o.prefill(blockDependencyBuffer, blockDependencyBuffer.length 
- collectedBlockDependencyBytes,
                     collectedBlockDependencyBytes);

http://git-wip-us.apache.org/repos/asf/commons-compress/blob/ad661a8d/src/main/java/org/apache/commons/compress/compressors/snappy/FramedSnappyCompressorOutputStream.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/compress/compressors/snappy/FramedSnappyCompressorOutputStream.java
 
b/src/main/java/org/apache/commons/compress/compressors/snappy/FramedSnappyCompressorOutputStream.java
index e4d2a5e..fdb5699 100644
--- 
a/src/main/java/org/apache/commons/compress/compressors/snappy/FramedSnappyCompressorOutputStream.java
+++ 
b/src/main/java/org/apache/commons/compress/compressors/snappy/FramedSnappyCompressorOutputStream.java
@@ -23,6 +23,7 @@ import java.io.IOException;
 import java.io.OutputStream;
 
 import org.apache.commons.compress.compressors.CompressorOutputStream;
+import org.apache.commons.compress.compressors.lz77support.Parameters;
 import org.apache.commons.compress.utils.ByteUtils;
 
 /**
@@ -42,6 +43,7 @@ public class FramedSnappyCompressorOutputStream extends 
CompressorOutputStream {
     private static final int MAX_COMPRESSED_BUFFER_SIZE = 1 << 16;
 
     private final OutputStream out;
+    private final Parameters params;
     private final PureJavaCrc32C checksum = new PureJavaCrc32C();
     // used in one-arg write method
     private final byte[] oneByte = new byte[1];
@@ -57,7 +59,19 @@ public class FramedSnappyCompressorOutputStream extends 
CompressorOutputStream {
      * @throws IOException if writing the signature fails
      */
     public FramedSnappyCompressorOutputStream(final OutputStream out) throws 
IOException {
+        this(out, 
SnappyCompressorOutputStream.createParameterBuilder(SnappyCompressorInputStream.DEFAULT_BLOCK_SIZE)
+             .build());
+    }
+
+    /**
+     * Constructs a new output stream that compresses
+     * snappy-framed-compressed data to the specified output stream.
+     * @param out the OutputStream to which to write the compressed data
+     * @throws IOException if writing the signature fails
+     */
+    public FramedSnappyCompressorOutputStream(final OutputStream out, 
Parameters params) throws IOException {
         this.out = out;
+        this.params = params;
         consumer = new ByteUtils.OutputStreamByteConsumer(out);
         out.write(FramedSnappyCompressorInputStream.SZ_SIGNATURE);
     }
@@ -104,7 +118,7 @@ public class FramedSnappyCompressorOutputStream extends 
CompressorOutputStream {
     private void flushBuffer() throws IOException {
         out.write(FramedSnappyCompressorInputStream.COMPRESSED_CHUNK_TYPE);
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        try (OutputStream o = new SnappyCompressorOutputStream(baos, 
currentIndex)) {
+        try (OutputStream o = new SnappyCompressorOutputStream(baos, 
currentIndex, params)) {
             o.write(buffer, 0, currentIndex);
         }
         byte[] b = baos.toByteArray();

http://git-wip-us.apache.org/repos/asf/commons-compress/blob/ad661a8d/src/test/java/org/apache/commons/compress/compressors/lz4/FramedLZ4CompressorRoundtripTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/commons/compress/compressors/lz4/FramedLZ4CompressorRoundtripTest.java
 
b/src/test/java/org/apache/commons/compress/compressors/lz4/FramedLZ4CompressorRoundtripTest.java
index d54fafe..ea63c1d 100644
--- 
a/src/test/java/org/apache/commons/compress/compressors/lz4/FramedLZ4CompressorRoundtripTest.java
+++ 
b/src/test/java/org/apache/commons/compress/compressors/lz4/FramedLZ4CompressorRoundtripTest.java
@@ -52,6 +52,10 @@ public final class FramedLZ4CompressorRoundtripTest extends 
AbstractTestCase {
             // small blocksize (so we get enough blocks) and enabled block 
dependency, otherwise defaults
             new Object[] { new 
FramedLZ4CompressorOutputStream.Parameters(FramedLZ4CompressorOutputStream.BlockSize.K64,
                 true, false, true) },
+            // default, tuned for speed
+            new Object[] { new 
FramedLZ4CompressorOutputStream.Parameters(FramedLZ4CompressorOutputStream.BlockSize.M4,
+                true, false, false, 
BlockLZ4CompressorOutputStream.createParameterBuilder()
+                    .tunedForSpeed().build()) },
         });
     }
 

Reply via email to