silentbalanceyh/vertx-zero

View on GitHub
vertx-gaia/vertx-ams/src/main/java/io/horizon/util/IoCompressor.java

Summary

Maintainability
A
0 mins
Test Coverage
package io.horizon.util;

import io.horizon.eon.VValue;
import io.horizon.eon.em.typed.CompressLevel;
import io.horizon.fn.HFn;

import java.io.ByteArrayOutputStream;
import java.util.zip.Deflater;
import java.util.zip.Inflater;

class IoCompressor {

    static byte[] compress(final byte[] data, final CompressLevel level) {
        return HFn.failOr(() -> {
            final Deflater deflater = new Deflater();
            deflater.setLevel(level.getLevel());
            deflater.setInput(data);

            try (final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(data.length)) {
                deflater.finish();
                final byte[] buffer = new byte[VValue.DFT.SIZE_BYTE_ARRAY];
                while (!deflater.finished()) {
                    final int count = deflater.deflate(buffer);
                    outputStream.write(buffer, 0, count);
                }
                return outputStream.toByteArray();
            }
        });
    }

    static byte[] decompress(final byte[] data) {
        return HFn.failOr(() -> {
            final Inflater inflater = new Inflater();
            inflater.setInput(data);

            try (final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(
                data.length)) {
                final byte[] buffer = new byte[VValue.DFT.SIZE_BYTE_ARRAY];
                while (!inflater.finished()) {
                    final int count = inflater.inflate(buffer);
                    outputStream.write(buffer, 0, count);
                }
                return outputStream.toByteArray();
            }
        });
    }
}