package cn.ms.compress.impl; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.zip.DataFormatException; import java.util.zip.Deflater; import java.util.zip.Inflater; import cn.ms.compress.Compress; import cn.ms.compress.support.SPI; /** * The Data Compression Based on deflater. * * @author lry */ @SPI("deflater") public class DeflaterCompress implements Compress { @Override public byte[] compress(byte[] data) throws IOException { ByteArrayOutputStream bos = new ByteArrayOutputStream(); Deflater compressor = new Deflater(1); try { compressor.setInput(data); compressor.finish(); final byte[] buf = new byte[2048]; while (!compressor.finished()) { int count = compressor.deflate(buf); bos.write(buf, 0, count); } } finally { compressor.end(); } return bos.toByteArray(); } @Override public byte[] uncompress(byte[] data) throws IOException { ByteArrayOutputStream bos = new ByteArrayOutputStream(); Inflater decompressor = new Inflater(); try { decompressor.setInput(data); final byte[] buf = new byte[2048]; while (!decompressor.finished()) { int count = decompressor.inflate(buf); bos.write(buf, 0, count); } } catch (DataFormatException e) { e.printStackTrace(); } finally { decompressor.end(); } return bos.toByteArray(); } }