如何压缩Android中的String

时间:2017-05-02 10:27:28

标签: android performance android-layout android-fragments deflate

我正在尝试压缩一个大字符串对象。这是我尝试过的,但我无法理解如何获取压缩数据,以及如何定义不同类型的压缩工具。

这是我从Android文档中获得的。

        byte[] input = jsonArray.getBytes("UTF-8");
        byte[] output = new byte[100];

        Deflater compresser = new Deflater();
        compresser.setInput(input);
        compresser.finish();
        int compressedDataLength = compresser.deflate(output);
        compresser.end();

compresser.deflate(output)为我提供了int个号码,100

但我无法理解哪种方法可以为我提供可以发送给服务的压缩输出。

3 个答案:

答案 0 :(得分:3)

我压缩数据的算法是Huffman。您可以通过简单的搜索找到它。但在你的情况下,它可能会帮助你:

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

答案 1 :(得分:1)

Deflator的文档显示输出已放入缓冲区output

答案 2 :(得分:1)

try {
     // Encode a String into bytes
     String inputString = "blahblahblah";
     byte[] input = inputString.getBytes("UTF-8");

     // Compress the bytes
     byte[] output = new byte[100];
     Deflater compresser = new Deflater();
     compresser.setInput(input);
     compresser.finish();
     int compressedDataLength = compresser.deflate(output);
     compresser.end();

     // Decompress the bytes
     Inflater decompresser = new Inflater();
     decompresser.setInput(output, 0, compressedDataLength);
     byte[] result = new byte[100];
     int resultLength = decompresser.inflate(result);
     decompresser.end();

     // Decode the bytes into a String
     String outputString = new String(result, 0, resultLength, "UTF-8");
 } catch(java.io.UnsupportedEncodingException ex) {
     // handle
 } catch (java.util.zip.DataFormatException ex) {
     // handle
 }

ENCODE,COMPRESS,DECOMPRESS,DECODE

所需的所有代码