aboutsummaryrefslogtreecommitdiffstats
path: root/vespajlib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-03-05 21:40:58 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2020-03-05 21:40:58 +0000
commitaabd0930e6569efa85f075b054de2200d9642f27 (patch)
treebab541bcb74783eb185be824cc53920041ea5546 /vespajlib
parent395e7270e0d1ccb793d499b4957c1d810e617338 (diff)
Use lz4 through the compressor in vespajlib.
Diffstat (limited to 'vespajlib')
-rw-r--r--vespajlib/src/main/java/com/yahoo/compress/Compressor.java19
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;