GZip in android [duplicate]

2019-02-07 00:48发布

问题:

This question already has an answer here:

  • How can I Zip and Unzip a string using GZIPOutputStream that is compatible with .Net? 9 answers

How to compress and decompress a file in android using GZip. please provide with some reference , so that it would a great help for me.

Thanks in advance

回答1:

Please use the following methods to compress the string using gzip.

public static byte[] compress(String string) throws IOException {
    ByteArrayOutputStream os = new ByteArrayOutputStream(string.length());
    GZIPOutputStream gos = new GZIPOutputStream(os);
    gos.write(string.getBytes());
    gos.close();
    byte[] compressed = os.toByteArray();
    os.close();
    return compressed;
}

public static String decompress(byte[] compressed) throws IOException {
    final int BUFFER_SIZE = 32;
    ByteArrayInputStream is = new ByteArrayInputStream(compressed);
    GZIPInputStream gis = new GZIPInputStream(is, BUFFER_SIZE);
    StringBuilder string = new StringBuilder();
    byte[] data = new byte[BUFFER_SIZE];
    int bytesRead;
    while ((bytesRead = gis.read(data)) != -1) {
        string.append(new String(data, 0, bytesRead));
    }
    gis.close();
    is.close();
    return string.toString();
}


回答2:

Check out GZIPInputStream and GZIPOutputStream.



回答3:

I ran into same problem some time ago. Here are the functions i used

Compress Function

if (responseCode == HttpConnection.HTTP_OK){

boolean stop = false, pause = false;
totalSize = conn.getLength() + downloaded;
chunkSize = (int)(conn.getLength() / 100);
System.out.println("*********-----" + conn.getLength() + "");
System.out.println("-----------------ok");
in = conn.openInputStream();
int length = 0, s = 0;
byte[] readBlock = new byte[(int)conn.getLength()];


while ((s = in.read(readBlock) != -1)
        length = length + s;
{
      if (!pause)
        {
            readBlock = Decompress.decompress(readBlock);
            out.write(readBlock, 0, length);
            downloaded += length;
            int a = getPerComplete(totalSize, downloaded);
            System.out.println("% OF Downloaded--------" + a);
            int a1 = getPerComplete(totalSize, downloaded);

Decompress function:-

public byte[] decompress(byte[] compressed) throws IOException
{
    GZIPInputStream gzipInputStream;
    if (compressed.length > 4)
    {
        gzipInputStream = new GZIPInputStream(
            new ByteArrayInputStream(compressed, 4,
                                     compressed.length - 4));

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        for (int value = 0; value != -1;)
        {
            value = gzipInputStream.read();
            if (value != -1)
            {
                baos.write(value);
            }
        }
        gzipInputStream.close();
        baos.close();

        return baos.toByteArray();
    }
    else
    {
       return null;
    }
}

}