public static byte[] decompress(byte[] in) {
        ByteArrayOutputStream bos = null;

        if (in != null) {
            ByteArrayInputStream bis = new ByteArrayInputStream(in);

            bos = new ByteArrayOutputStream();

            GZIPInputStream gis = null;

            try {
                gis = new GZIPInputStream(bis);

                byte[] buf = new byte[8192];
                int    r   = -1;

                while ((r = gis.read(buf)) > 0) {
                    bos.write(buf, 0, r);
                }
            } catch (IOException e) {
                bos = null;
                throw new RuntimeException(e);
            } finally {
                try {
                    gis.close();
                    bos.close();
                } catch (Exception e) {
                }
            }
        }

        return (bos == null) ? null
                             : bos.toByteArray();
    }