diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2020-03-05 21:40:58 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2020-03-05 21:40:58 +0000 |
commit | aabd0930e6569efa85f075b054de2200d9642f27 (patch) | |
tree | bab541bcb74783eb185be824cc53920041ea5546 /vespajlib/src/main/java/com/yahoo/compress | |
parent | 395e7270e0d1ccb793d499b4957c1d810e617338 (diff) |
Use lz4 through the compressor in vespajlib.
Diffstat (limited to 'vespajlib/src/main/java/com/yahoo/compress')
-rw-r--r-- | vespajlib/src/main/java/com/yahoo/compress/Compressor.java | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/compress/Compressor.java b/vespajlib/src/main/java/com/yahoo/compress/Compressor.java index 9e9fac936f4..ee003734d1a 100644 --- a/vespajlib/src/main/java/com/yahoo/compress/Compressor.java +++ b/vespajlib/src/main/java/com/yahoo/compress/Compressor.java @@ -31,6 +31,10 @@ public class Compressor { this(type, 9, 0.95, 0); } + public Compressor(CompressionType type, int level) { + this(type, level, 0.95, 0); + } + /** * Creates a compressor. * @@ -79,8 +83,7 @@ public class Compressor { case LZ4: int dataSize = uncompressedSize.isPresent() ? uncompressedSize.get() : data.length; if (dataSize < compressMinSizeBytes) return new Compression(CompressionType.INCOMPRESSIBLE, dataSize, data); - LZ4Compressor compressor = level < 7 ? factory.fastCompressor() : factory.highCompressor(); - byte[] compressedData = compressor.compress(data, 0, dataSize); + byte[] compressedData = getCompressor().compress(data, 0, dataSize); if (compressedData.length + 8 >= dataSize * compressionThresholdFactor) return new Compression(CompressionType.INCOMPRESSIBLE, dataSize, data); return new Compression(CompressionType.LZ4, dataSize, compressedData); @@ -88,6 +91,9 @@ public class Compressor { throw new IllegalArgumentException(requestedCompression + " is not supported"); } } + private LZ4Compressor getCompressor() { + return level < 7 ? factory.fastCompressor() : factory.highCompressor(); + } /** Compresses some data using the requested compression type */ public Compression compress(CompressionType requestedCompression, byte[] data) { return compress(requestedCompression, data, Optional.empty()); } /** Compresses some data using the compression type of this compressor */ @@ -133,6 +139,15 @@ public class Compressor { return decompress(compression.type(), compression.data(), 0, compression.uncompressedSize(), Optional.empty()); } + public byte[] compressUnconditionally(byte[] input) { + return getCompressor().compress(input); + } + public void decompressUnconditionally(byte[] input, byte[] output) { + if (input.length > 0) { + factory.safeDecompressor().decompress(input, output); + } + } + public static class Compression { private final CompressionType compressionType; |