package voldemort.store.compress;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.commons.io.IOUtils;
/**
* Useful base class for stream-based compression strategies.
*/
public abstract class StreamCompressionStrategy implements CompressionStrategy {
public byte[] deflate(byte[] data) throws IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
OutputStream gos = wrapOutputStream(bos);
gos.write(data);
gos.close();
return bos.toByteArray();
}
protected abstract OutputStream wrapOutputStream(OutputStream underlying) throws IOException;
protected abstract InputStream wrapInputStream(InputStream underlying) throws IOException;
public byte[] inflate(byte[] data) throws IOException {
InputStream is = wrapInputStream(new ByteArrayInputStream(data));
byte[] inflated = IOUtils.toByteArray(is);
is.close();
return inflated;
}
}