package com.linkedin.r2.filter.compression;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.io.IOUtils;
import org.iq80.snappy.SnappyFramedInputStream;
import org.iq80.snappy.SnappyFramedOutputStream;
/**
* Compressor for "x-snappy-framed" Encoding.
*
* @author Ang Xu
*/
public class SnappyFramedCompressor implements Compressor {
private static final String HTTP_NAME = "x-snappy-framed";
@Override
public String getContentEncodingName()
{
return HTTP_NAME;
}
@Override
public byte[] inflate(InputStream data) throws CompressionException
{
ByteArrayOutputStream out = new ByteArrayOutputStream();
try (SnappyFramedInputStream snappy = new SnappyFramedInputStream(data, true))
{
IOUtils.copy(snappy, out);
}
catch (IOException e)
{
throw new CompressionException(CompressionConstants.DECODING_ERROR + getContentEncodingName(), e);
}
return out.toByteArray();
}
@Override
public byte[] deflate(InputStream data) throws CompressionException
{
ByteArrayOutputStream out = new ByteArrayOutputStream();
try (SnappyFramedOutputStream snappy = new SnappyFramedOutputStream(out))
{
IOUtils.copy(data, snappy);
}
catch (IOException e)
{
throw new CompressionException(CompressionConstants.DECODING_ERROR + getContentEncodingName(), e);
}
return out.toByteArray();
}
}