13

如何使用 GZip 在 android 中压缩和解压缩文件。请提供一些参考,以便对我有很大帮助。

提前致谢

4

3 回答 3

25

请使用以下方法使用 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();
}
于 2014-02-25T09:36:59.400 回答
4

签出GZIPInputStreamGZIPOutputStream

于 2010-09-20T14:28:52.497 回答
2

前段时间我遇到了同样的问题。这是我使用的功能

压缩功能

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);

解压功能:-

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;
    }
}

}

于 2013-01-02T07:35:54.757 回答