/**
* 字符串的解压
* @param str 对字符串解压
* @return 返回解压缩后的字符串
* @throws IOException
*/
public static String uncompress(String str) throws IOException {
if (str == null || str.length() == 0) {
return str;
}
// 创建一个新的输出流
ByteArrayOutputStream out = new ByteArrayOutputStream();
// 创建一个 ByteArrayInputStream,使用 buf 作为其缓冲区数组
ByteArrayInputStream in = new ByteArrayInputStream(str
.getBytes("ISO-8859-1"));
// 使用默认缓冲区大小创建新的输入流
GZIPInputStream gunzip = new GZIPInputStream(in);
byte[] buffer = new byte[256];
int n=0;
// 将未压缩数据读入字节数组
while ((n = gunzip.read(buffer))>= 0) {
out.write(buffer, 0, n);
}
// toString()使用平台默认编码,也可以显式的指定如toString("GBK")
return out.toString("utf-8");
}
/**
* 字符串的压缩
* @param str 待压缩的字符串
* @return 返回压缩后的字符串
* @throws IOException
*/
public static String compress(String str) throws IOException {
if (null == str || str.length() <= 0) {
return str;
}
// 创建一个新的输出流
ByteArrayOutputStream out = new ByteArrayOutputStream();
// 使用默认缓冲区大小创建新的输出流
GZIPOutputStream gzip = new GZIPOutputStream(out);
// 将字节写入此输出流
gzip.write(str.getBytes("utf-8")); //因为后台默认字符集有可能是GBK字符集,所以此处需指定一个字符集
gzip.close();
// 使用指定的 charsetName,通过解码字节将缓冲区内容转换为字符串
return out.toString("ISO-8859-1");
}
/**
* 判断字符串是否压缩过,是返回true,否返回false
* @param jsonStr
* @return
*/
public boolean isGzip(String jsonStr) {
boolean gzip = true;
try {
//解压数据
uncompress(jsonStr);
/* System.out.println("\n解压缩后的字符串为--->" + jy);
System.out.println("解压缩后的字符串长度为--->"+jy.length()); */
} catch (Exception e) {
//e1.printStackTrace();
System.out.println("判断字符串是否压缩过,出现问题" + e.getMessage());
if(e.getMessage()!= null){
if(e.getMessage().equals("Not in GZIP format")){
gzip = false;
}
}
}
return gzip;
}