aboutsummaryrefslogtreecommitdiffstats
path: root/vespajlib/src/main/java/com/yahoo/compress
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-08-30 12:11:35 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2021-08-30 12:11:35 +0200
commit37eaa36494321b3d3c1427fabf34ebe020f4b9ac (patch)
tree6868462525801a65eab185fa1577d891772e8546 /vespajlib/src/main/java/com/yahoo/compress
parent11e7a365a7f6e63b109f24f3f81ff4aaee9bad72 (diff)
lz4 compress blobs.
Diffstat (limited to 'vespajlib/src/main/java/com/yahoo/compress')
-rw-r--r--vespajlib/src/main/java/com/yahoo/compress/Compressor.java25
1 files changed, 14 insertions, 11 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/compress/Compressor.java b/vespajlib/src/main/java/com/yahoo/compress/Compressor.java
index ad51ac1ca38..98228292cc7 100644
--- a/vespajlib/src/main/java/com/yahoo/compress/Compressor.java
+++ b/vespajlib/src/main/java/com/yahoo/compress/Compressor.java
@@ -82,22 +82,25 @@ public class Compressor {
* @throws IllegalArgumentException if the compression type is not supported
*/
public Compression compress(CompressionType requestedCompression, byte[] data, Optional<Integer> uncompressedSize) {
+ return compress(requestedCompression, data, 0, uncompressedSize.orElse(data.length));
+ }
+ public Compression compress(CompressionType requestedCompression, byte[] data, int offset, int len) {
switch (requestedCompression) {
case NONE:
- data = uncompressedSize.isPresent() ? Arrays.copyOf(data, uncompressedSize.get()) : data;
+ if ((offset != 0) || (len != data.length)) {
+ data = Arrays.copyOfRange(data, offset, offset + len);
+ }
return new Compression(CompressionType.NONE, data.length, data);
case LZ4:
- int dataSize = uncompressedSize.isPresent() ? uncompressedSize.get() : data.length;
- if (dataSize < compressMinSizeBytes) return new Compression(CompressionType.INCOMPRESSIBLE, dataSize, data);
- 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);
+ if (len < compressMinSizeBytes) return new Compression(CompressionType.INCOMPRESSIBLE, len, data);
+ byte[] compressedData = getCompressor().compress(data, offset, len);
+ if (compressedData.length + 8 >= len * compressionThresholdFactor)
+ return new Compression(CompressionType.INCOMPRESSIBLE, len, data);
+ return new Compression(CompressionType.LZ4, len, compressedData);
case ZSTD:
- int dataLength = uncompressedSize.orElse(data.length);
- if (dataLength < compressMinSizeBytes) return new Compression(CompressionType.INCOMPRESSIBLE, dataLength, data);
- byte[] compressed = zstdCompressor.compress(data, 0, dataLength);
- return new Compression(CompressionType.ZSTD, dataLength, compressed);
+ if (len < compressMinSizeBytes) return new Compression(CompressionType.INCOMPRESSIBLE, len, data);
+ byte[] compressed = zstdCompressor.compress(data, offset, len);
+ return new Compression(CompressionType.ZSTD, len, compressed);
default:
throw new IllegalArgumentException(requestedCompression + " is not supported");
}