作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试压缩一个大字符串对象。这是我尝试过的方法,但我无法理解如何获取压缩数据,以及如何定义不同类型的压缩工具。
这是我从 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
但我无法理解哪种方法可以提供我可以发送给服务的压缩输出。
最佳答案
我用来压缩数据的算法是霍夫曼算法。您可以通过简单的搜索找到它。但在您的情况下,也许它可以帮助您:
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;
}
要解压缩它,您可以使用:
public static String decompress(byte[] compressed) throws IOException {
ByteArrayInputStream bis = new ByteArrayInputStream(compressed);
GZIPInputStream gis = new GZIPInputStream(bis);
BufferedReader br = new BufferedReader(new InputStreamReader(gis, "UTF-8"));
StringBuilder sb = new StringBuilder();
String line;
while((line = br.readLine()) != null) {
sb.append(line);
}
br.close();
gis.close();
bis.close();
return sb.toString();
}
关于android - 如何在 Android 中压缩字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43735611/
我是一名优秀的程序员,十分优秀!