diff options
Diffstat (limited to 'vespajlib/src/main/java/com/yahoo/compress/Compressor.java')
-rw-r--r-- | vespajlib/src/main/java/com/yahoo/compress/Compressor.java | 29 |
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()); } |