package se.despotify.util; import java.io.ByteArrayInputStream; import java.io.IOException; import java.nio.ByteBuffer; import java.util.LinkedList; import java.util.List; import java.util.zip.GZIPInputStream; public class GZIP { private static final int BUFFER_SIZE = 4096; public static byte[] inflate(byte[] bytes){ ByteArrayInputStream byteArrayInputStream; GZIPInputStream gzipInputStream; List<ByteBuffer> buffers; ByteBuffer buffer; int nbytes; /* Get InputStream of bytes. */ byteArrayInputStream = new ByteArrayInputStream(bytes); /* Allocate buffer. */ buffer = ByteBuffer.allocate(GZIP.BUFFER_SIZE); buffers = new LinkedList<ByteBuffer>(); nbytes = 0; /* Inflate deflated data. */ try{ gzipInputStream = new GZIPInputStream(byteArrayInputStream); while(gzipInputStream.available() > 0){ if(!buffer.hasRemaining()){ nbytes += buffer.position(); buffer.flip(); buffers.add(buffer); buffer = ByteBuffer.allocate(GZIP.BUFFER_SIZE); } buffer.put((byte)gzipInputStream.read()); } } catch(IOException e){ /* * This also catches EOFException's. Do nothing, just return what we * decompressed so far. */ } byte[] data = new byte[nbytes + buffer.position()]; ByteBuffer dataBuffer = ByteBuffer.wrap(data); buffer.flip(); buffers.add(buffer); for(ByteBuffer b : buffers){ dataBuffer.put(b); } return data; } }