summaryrefslogtreecommitdiffstats
path: root/vespajlib/src/main/java/com/yahoo/compress/Compressor.java
diff options
context:
space:
mode:
Diffstat (limited to 'vespajlib/src/main/java/com/yahoo/compress/Compressor.java')
-rw-r--r--vespajlib/src/main/java/com/yahoo/compress/Compressor.java29
1 files changed, 19 insertions, 10 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/compress/Compressor.java b/vespajlib/src/main/java/com/yahoo/compress/Compressor.java
index 98228292cc7..eacb0f2c406 100644
--- a/vespajlib/src/main/java/com/yahoo/compress/Compressor.java
+++ b/vespajlib/src/main/java/com/yahoo/compress/Compressor.java
@@ -87,31 +87,40 @@ public class Compressor {
public Compression compress(CompressionType requestedCompression, byte[] data, int offset, int len) {
switch (requestedCompression) {
case NONE:
- if ((offset != 0) || (len != data.length)) {
- data = Arrays.copyOfRange(data, offset, offset + len);
- }
- return new Compression(CompressionType.NONE, data.length, data);
+ return compact(CompressionType.NONE, data, offset, len);
case LZ4:
- if (len < compressMinSizeBytes) return new Compression(CompressionType.INCOMPRESSIBLE, len, data);
+ if (len < compressMinSizeBytes) {
+ return compact(CompressionType.INCOMPRESSIBLE, data, offset, len);
+ }
byte[] compressedData = getCompressor().compress(data, offset, len);
- if (compressedData.length + 8 >= len * compressionThresholdFactor)
- return new Compression(CompressionType.INCOMPRESSIBLE, len, data);
+ if (compressedData.length + 8 >= len * compressionThresholdFactor) {
+ return compact(CompressionType.INCOMPRESSIBLE, data, offset, len);
+ }
return new Compression(CompressionType.LZ4, len, compressedData);
case ZSTD:
- if (len < compressMinSizeBytes) return new Compression(CompressionType.INCOMPRESSIBLE, len, data);
+ if (len < compressMinSizeBytes) {
+ return compact(CompressionType.INCOMPRESSIBLE, data, offset, len);
+ }
byte[] compressed = zstdCompressor.compress(data, offset, len);
return new Compression(CompressionType.ZSTD, len, compressed);
default:
throw new IllegalArgumentException(requestedCompression + " is not supported");
}
}
+
+ private Compression compact(CompressionType type, byte[] data, int offset, int len) {
+ if ((offset != 0) || (len != data.length)) {
+ data = Arrays.copyOfRange(data, offset, offset + len);
+ }
+ return new Compression(type, len, data);
+ }
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()); }
+ public Compression compress(CompressionType requestedCompression, byte[] data) { return compress(requestedCompression, data, 0, data.length); }
/** Compresses some data using the compression type of this compressor */
- public Compression compress(byte[] data, int uncompressedSize) { return compress(type, data, Optional.of(uncompressedSize)); }
+ public Compression compress(byte[] data, int uncompressedSize) { return compress(type, data, 0, uncompressedSize); }
/** Compresses some data using the compression type of this compressor */
public Compression compress(byte[] data) { return compress(type, data, Optional.empty()); }