package net.md_5.bungee.jni.zlib; import io.netty.buffer.ByteBuf; import java.util.zip.DataFormatException; import java.util.zip.Deflater; import java.util.zip.Inflater; public class JavaZlib implements BungeeZlib { private final byte[] buffer = new byte[ 8192 ]; // private boolean compress; private Deflater deflater; private Inflater inflater; @Override public void init(boolean compress, int level) { this.compress = compress; free(); if ( compress ) { deflater = new Deflater( level ); } else { inflater = new Inflater(); } } @Override public void free() { if ( deflater != null ) { deflater.end(); } if ( inflater != null ) { inflater.end(); } } @Override public void process(ByteBuf in, ByteBuf out) throws DataFormatException { byte[] inData = new byte[ in.readableBytes() ]; in.readBytes( inData ); if ( compress ) { deflater.setInput( inData ); deflater.finish(); while ( !deflater.finished() ) { int count = deflater.deflate( buffer ); out.writeBytes( buffer, 0, count ); } deflater.reset(); } else { inflater.setInput( inData ); while ( !inflater.finished() && inflater.getTotalIn() < inData.length ) { int count = inflater.inflate( buffer ); out.writeBytes( buffer, 0, count ); } inflater.reset(); } } }