Java使用Gzip压缩字符串实践
目录
GNU Gzip 官网:https://www.gnu.org/software/gzip/
在 Java 中使用 Gzip 压缩字符串代码如下:
package com.bqteam.aurthur;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
public class StringGZip {
public static void main(String[] args) throws Exception {
StringBuilder value = new StringBuilder() ;
for (int i = 0; i < 1000; i++) {
value.append("BQteam String Java 压缩测试");
}
//字符串压缩为byte数组
byte[] values = value.toString().getBytes() ;
System.out.println("解压前大小"+values.length);
values = compress(values) ;
System.out.println("解压后大小"+values.length);
//把压缩后的byte数组转为字符串
String str = new String(values,"iso8859-1") ;
//做一些数据操作(演示输出)
System.out.println(str);
//将接受到的字符串转换为byte数组
values = str.getBytes("iso8859-1") ;
//解压缩这个byte数组
values = decompress(values) ;
System.out.println(new String(values, "utf-8"));
}
/**
* 数据解压缩
*
* @param data
* @return
* @throws Exception
*/
public static byte[] decompress(byte[] data) throws Exception {
ByteArrayInputStream bais = new ByteArrayInputStream(data);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// 解压缩
decompress(bais, baos);
data = baos.toByteArray();
baos.flush();
baos.close();
bais.close();
return data;
}
/**
* 数据解压缩
*
* @param is
* @param os
* @throws Exception
*/
public static void decompress(InputStream is, OutputStream os)
throws Exception {
GZIPInputStream gis = new GZIPInputStream(is);
int count;
byte data[] = new byte[BUFFER];
while ((count = gis.read(data, 0, BUFFER)) != -1) {
os.write(data, 0, count);
}
gis.close();
}
public static byte[] compress(byte[] data) throws Exception {
ByteArrayInputStream bais = new ByteArrayInputStream(data);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// 压缩
compress(bais, baos);
byte[] output = baos.toByteArray();
baos.flush();
baos.close();
bais.close();
return output;
}
static final int BUFFER = 10240 ;
/**
* 数据压缩
*
* @param is
* @param os
* @throws Exception
*/
public static void compress(InputStream is, OutputStream os)
throws Exception {
GZIPOutputStream gos = new GZIPOutputStream(os);
int count;
byte data[] = new byte[BUFFER];
while ((count = is.read(data, 0, BUFFER)) != -1) {
gos.write(data, 0, count);
}
gos.finish();
gos.flush();
gos.close();
}
}