package com.leansoft.luxun.message.compress;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import com.leansoft.luxun.message.generated.CompressionCodec;
public class CompressionUtils {
public static byte[] compress(byte[] data, CompressionCodec compressionCodec) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
final CompressionFacade compressionFacade = CompressionFactory.create(//
compressionCodec
, outputStream);
try {
compressionFacade.write(data);
} catch (IOException e) {
throw new IllegalStateException("writting data failed", e);
} finally {
compressionFacade.close();
}
return outputStream.toByteArray();
}
public static byte[] decompress(byte[] data, CompressionCodec compressionCodec) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
InputStream inputStream = new ByteArrayInputStream(data);
byte[] intermediateBuffer = new byte[1024];
final CompressionFacade compressionFacade = CompressionFactory.create(//
compressionCodec
, inputStream);
try {
int dataRead = 0;
while ((dataRead = compressionFacade.read(intermediateBuffer)) > 0) {
outputStream.write(intermediateBuffer, 0, dataRead);
}
} catch (IOException e) {
throw new IllegalStateException("decompression data failed", e);
} finally {
compressionFacade.close();
}
return outputStream.toByteArray();
}
}