如何在Android Async Task中压缩非常大的响应字符串大约100MB作为响应

时间:2016-08-22 09:09:41

标签: android android-asynctask

我有一个服务器,它以字符串形式发送100 MB的响应。我试图找出如何在异步任务中压缩该响应。响应采用XML格式。请为此建议一些图书馆。

1 个答案:

答案 0 :(得分:0)

package java.util.zip;

/**
 * This class compresses data using the <i>DEFLATE</i> algorithm (see <a
 * href="http://www.gzip.org/algorithm.txt">specification</a>).    
 **/
public class Deflater { }

例如

 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.util.zip.DataFormatException;
 import java.util.zip.Deflater;
 import java.util.zip.Inflater;    

public static byte[] compress(byte[] data) throws IOException {
    Deflater deflater = new Deflater();
    deflater.setInput(data);
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream(data.length);
    deflater.finish();
    byte[] buffer = new byte[1024];
    while (!deflater.finished()) {
        int count = deflater.deflate(buffer); // returns the generated code... index
        outputStream.write(buffer, 0, count);
    }
    outputStream.close();
    byte[] output = outputStream.toByteArray();
    LOG.debug("Original: " + data.length / 1024 + " Kb");
    LOG.debug("Compressed: " + output.length / 1024 + " Kb");
    return output;
}

public static byte[] decompress(byte[] data) throws IOException, DataFormatException {
    Inflater inflater = new Inflater();
    inflater.setInput(data);
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream(data.length);
    byte[] buffer = new byte[1024];
    while (!inflater.finished()) {
        int count = inflater.inflate(buffer);
        outputStream.write(buffer, 0, count);
    }
    outputStream.close();
    byte[] output = outputStream.toByteArray();
    LOG.debug("Original: " + data.length);
    LOG.debug("Compressed: " + output.length);
    return output;
}