package com.jarvis.cache.compress;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import org.apache.commons.compress.compressors.CompressorInputStream;
import org.apache.commons.compress.compressors.CompressorOutputStream;
import org.apache.commons.compress.compressors.CompressorStreamFactory;
public class CommonsCompressor implements ICompressor {
private static final int BUFFER=1024;
private static final CompressorStreamFactory factory=new CompressorStreamFactory();
private String name;
public CommonsCompressor(String name) {
this.name=name;
}
@Override
public byte[] compress(ByteArrayInputStream bais) throws Exception {
ByteArrayOutputStream baos=new ByteArrayOutputStream();
CompressorOutputStream cos=factory.createCompressorOutputStream(name, baos);
int len;
byte buf[]=new byte[BUFFER];
while((len=bais.read(buf, 0, BUFFER)) != -1) {
cos.write(buf, 0, len);
}
cos.flush();
cos.close();
byte[] output=baos.toByteArray();
baos.flush();
baos.close();
bais.close();
return output;
}
@Override
public byte[] decompress(ByteArrayInputStream bais) throws Exception {
ByteArrayOutputStream baos=new ByteArrayOutputStream();
CompressorInputStream cis=factory.createCompressorInputStream(name, bais);
int len;
byte buf[]=new byte[BUFFER];
while((len=cis.read(buf, 0, BUFFER)) != -1) {
baos.write(buf, 0, len);
}
cis.close();
byte[] output=baos.toByteArray();
baos.flush();
baos.close();
bais.close();
return output;
}
}