THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
...
Code Block | ||||
---|---|---|---|---|
| ||||
public interface CacheObjectTransformer { /** Additional space required to store the transformed data. */ public int OVERHEAD = 2; /** * Transforms the data. * * @param original Original data. * @return Transformed data or {@code null} when transformation is not possible/suitable. */ public ByteBuffer transform(ByteBuffer original); /** * Restores the data. * * @param transformed Transformed data. * @return Restored data. */ public ByteBuffer restore(ByteBuffer transformed); /** * Returns {@code true} when direct byte buffers are required. * * @return Direct flag. */ public boolean direct(); } |
This API is known for the overhead used to store transformed data and allows users to use direct and wrapped byte buffers.
...
Code Block | ||||
---|---|---|---|---|
| ||||
class CompressionTransformer extends CacheObjectTransformerAdapter { protected ByteBuffer transform(ByteBuffer original) throws IgniteCheckedException { int locOverhead = 4; // Original length. int totalOverhead = CacheObjectTransformerCacheObjectTransformerUtils.OVERHEAD + locOverhead; int origSize = original.remaining(); int lim = origSize - totalOverhead; if (lim <= 0) throw new IgniteCheckedException("Compression is not profitable."); ByteBuffer compressed = byteBuffer(lim); compressed.position(locOverhead); Zstd.compress(compressed, original, 1); compressed.flip(); compressed.putInt(origSize); compressed.rewind(); return compressed; } protected ByteBuffer restore(ByteBuffer transformed) { ByteBuffer restored = byteBuffer(transformed.getInt()); Zstd.decompress(restored, transformed); restored.flip(); return restored; } } |
...