package hprose.example.filter.compress;
import hprose.common.HproseContext;
import hprose.common.HproseFilter;
import hprose.io.ByteBufferStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
public class CompressFilter implements HproseFilter {
private static final Logger logger = Logger.getLogger(CompressFilter.class.getName());
@Override
public ByteBuffer inputFilter(ByteBuffer data, HproseContext context) {
ByteBufferStream is = new ByteBufferStream(data);
ByteBufferStream os = new ByteBufferStream();
try {
GZIPInputStream gis = new GZIPInputStream(is.getInputStream());
os.readFrom(gis);
}
catch (IOException ex) {
logger.log(Level.SEVERE, null, ex);
}
return os.buffer;
}
@Override
public ByteBuffer outputFilter(ByteBuffer data, HproseContext context) {
ByteBufferStream is = new ByteBufferStream(data);
ByteBufferStream os = new ByteBufferStream();
try {
GZIPOutputStream gos = new GZIPOutputStream(os.getOutputStream());
is.writeTo(gos);
gos.finish();
}
catch (IOException ex) {
logger.log(Level.SEVERE, null, ex);
}
return os.buffer;
}
}