package com.zghzbckj.project.utils;
import com.ourway.base.CommonConstants;
import com.ourway.base.utils.JackSonJsonUtils;
import com.ourway.base.utils.TextUtils;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Base64;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
public class StringUtils {
final static Base64.Encoder encoder = Base64.getEncoder();
final static Base64.Decoder decoder = Base64.getDecoder();
/**
*<p>方法:返回指定長度的字符串 </p>
*<ul>
*<li> @param s TODO</li>
*<li> @param len TODO</li>
*<li>@return java.lang.String </li>
*<li>@author JackZhou </li>
*<li>@date 2019/4/13 18:18 </li>
*</ul>
*/
public static String getSubStr(String s, int len) {
if (TextUtils.isEmpty(s)) {
return "";
}
if (s.length() > len) {
return s.substring(0, len);
}
if (s.length() <= len) {
return s;
}
return "";
}
/**
*<p>方法:compress 压缩字符串</p>
*<ul>
*<li> @param str TODO</li>
*<li>@return java.lang.String </li>
*<li>@author D.chen.g </li>
*<li>@date 2019/12/5 14:18 </li>
*</ul>
*/
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(CommonConstants.CHARSET_UTF_8)); // 因为后台默认字符集有可能是GBK字符集,所以此处需指定一个字符集
gzip.close();
// 使用指定的 charsetName,通过解码字节将缓冲区内容转换为字符串
return out.toString(CommonConstants.CHARSET_ISO8859_1);
}
/**
*<p>方法:unCompress 解压字符串 </p>
*<ul>
*<li> @param str TODO</li>
*<li>@return java.lang.String </li>
*<li>@author D.chen.g </li>
*<li>@date 2019/12/5 14:17 </li>
*</ul>
*/
public static String unCompress(String str) throws IOException {
if (null == str || str.length() <= 0) {
return str;
}
// 创建一个新的输出流
ByteArrayOutputStream out = new ByteArrayOutputStream();
// 创建一个 ByteArrayInputStream,使用 buf 作为其缓冲 区数组
ByteArrayInputStream in = new ByteArrayInputStream(str.getBytes(CommonConstants.CHARSET_ISO8859_1));
// 使用默认缓冲区大小创建新的输入流
GZIPInputStream gzip = new GZIPInputStream(in);
byte[] buffer = new byte[256];
int n = 0;
// 将未压缩数据读入字节数组
while ((n = gzip.read(buffer)) >= 0) {
out.write(buffer, 0, n);
}
// 使用指定的 charsetName,通过解码字节将缓冲区内容转换为字符串
return out.toString(CommonConstants.CHARSET_UTF_8);
}
/**
*<p>方法:base64Code base64编码 </p>
*<ul>
*<li> @param text TODO</li>
*<li>@return java.lang.String </li>
*<li>@author D.chen.g </li>
*<li>@date 2019/12/5 14:17 </li>
*</ul>
*/
public static String base64Code(String text) throws Exception {
if (TextUtils.isEmpty(text)) {
text = "";
}
byte[] textByte = text.getBytes(CommonConstants.CHARSET_UTF_8);
final String encodedText = encoder.encodeToString(textByte);
return encodedText;
}
/**
*<p>方法:deBase64Code base64编码后的字符串解码 </p>
*<ul>
*<li> @param text TODO</li>
*<li>@return java.lang.String </li>
*<li>@author D.chen.g </li>
*<li>@date 2019/12/5 14:16 </li>
*</ul>
*/
public static String deBase64Code(String text) {
String encodedText="";
try {
encodedText = new String(decoder.decode(text), CommonConstants.CHARSET_UTF_8);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return encodedText;
}
/**
*<p>方法:base64Andcompress base64编码以及压缩 </p>
*<ul>
*<li> @param text TODO</li>
*<li>@return java.lang.String </li>
*<li>@author D.chen.g </li>
*<li>@date 2019/12/5 14:21 </li>
*</ul>
*/
public static String base64Andcompress(String text) {
try {
return compress(base64Code(text));
} catch (Exception e) {
e.printStackTrace();
return "";
}
}
/**
*<p>方法:base64解码以及解压 </p>
*<ul>
*<li> @param text TODO</li>
*<li>@return java.lang.String </li>
*<li>@author D.chen.g </li>
*<li>@date 2019/12/5 14:22 </li>
*</ul>
*/
public static String deBase64AndUncompress(String text) {
try {
return deBase64Code(unCompress(text));
} catch (Exception e) {
e.printStackTrace();
return "";
}
}
/**
*<p>方法:base64AndcompressJson 数据返回bean变成Json字符串后编码压缩 </p>
*<ul>
*<li> @param data TODO</li>
*<li>@return java.lang.String </li>
*<li>@author D.chen.g </li>
*<li>@date 2019/12/6 17:52 </li>
*</ul>
*/
public static String base64AndCompressJson(Object data) {
try {
String text=JackSonJsonUtils.toJson(data);
return base64Andcompress(text);
} catch (Exception e) {
e.printStackTrace();
return "";
}
}
}