public boolean compress(ByteBuffer in, ByteBuffer out,
ByteBuffer overflow) throws IOException {
Deflater deflater = new Deflater(compressionLevel, true);
int length = in.remaining();
deflater.setInput(in.array(), in.arrayOffset() + in.position(), length);
deflater.finish();
int outSize = 0;
int offset = out.arrayOffset() + out.position();
while (!deflater.finished() && (length > outSize)) {
int size = deflater.deflate(out.array(), offset, out.remaining());
out.position(size + out.position());