Java后端向前端传GZip压缩后的数据,提高响应速度

//示例
public String queryUserGroupList(String token, HttpServletRequest request,HttpServletResponse response) throws IOException {
        ServletOutputStream out = response.getOutputStream();
        Map<String, Object> resultMap = new HashMap<String, Object>();
        Gson gson = new GsonBuilder().registerTypeAdapterFactory(new NullStringToEmptyAdapterFactory()).create();
        String jsonResult;
        try {
            ArrayList<User> userlist = userService.queryUserByToken(token);
            ArrayList<Usergroup> userGroupList = userGroupService
                    .queryUserGroupByUserGroupId(userlist.get(0).getUserGroupID());
            resultMap.put("result", 0);
            resultMap.put("userGroupList", userGroupList);
            jsonResult = gson.toJson(resultMap);
            //return jsonResult;
            if (request.getHeader("accept-encoding") != null) {
                //IOS Gizp
                if (request.getHeader("user-agent") != null && request.getHeader("user-agent").indexOf("iOS") != -1) {
                    // 告诉浏览器,当前发送的是gzip格式的内容
                    response.setHeader("Content-Encoding", "gzip");
                    response.setContentType("text/html");
                    out.write(GZIPUtils.compress(jsonResult));
                    out.flush();
                    out.close();
                    return null;
                } else { //不是IOS的 Gzip
                    // 告诉浏览器,当前发送的是gzip格式的内容
                    response.setHeader("Content-Encoding", "gzip");
                    response.setContentType("text/html");
                    out.write(GZIPUtils.compress(jsonResult));
                    out.flush();
                    out.close();
                    return null;
                }
            } else {
                return jsonResult;
            }
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
            resultMap.put("result", 6);
            jsonResult = gson.toJson(resultMap);
            return jsonResult;
        }

    }
//调用GZip压缩的工具类
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

public class GZIPUtils {
	public static final String GZIP_ENCODE_UTF_8 = "UTF-8";
	public static final String GZIP_ENCODE_ISO_8859_1 = "ISO-8859-1";

	/**
	 * 压缩
	 * 
	 * @param str
	 * @param encoding
	 * @return
	 */
	public static byte[] compress(String str, String encoding) {
		if (str == null || str.length() == 0) {
			return null;
		}
		ByteArrayOutputStream out = new ByteArrayOutputStream();
		GZIPOutputStream gzip;
		try {
			gzip = new GZIPOutputStream(out);
			gzip.write(str.getBytes(encoding));
			gzip.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return out.toByteArray();
	}

	/**
	 * 默认以UTF-8编码来压缩
	 * @param str
	 * @return
	 * @throws IOException
	 */
	public static byte[] compress(String str) throws IOException {
		return compress(str, GZIP_ENCODE_UTF_8);
	}


	/**
	 * 解压缩
	 * 
	 * @param bytes
	 * @return
	 */
	public static byte[] uncompress(byte[] bytes) {
		if (bytes == null || bytes.length == 0) {
			return null;
		}
		ByteArrayOutputStream out = new ByteArrayOutputStream();
		ByteArrayInputStream in = new ByteArrayInputStream(bytes);
		GZIPInputStream ungzip ;
		try {
			ungzip = new GZIPInputStream(in);
			byte[] buffer = new byte[256];
			int n;
			while ((n = ungzip.read(buffer)) >= 0) {
				out.write(buffer, 0, n);
			}
			in.close();
			ungzip.close();
		} catch (Exception e) {
			e.printStackTrace();

		}
		return out.toByteArray();
	}

	/**
	 * 解压缩成字符串
	 * 
	 * @param bytes
	 * @param encoding
	 * @return
	 */
	public static String uncompressToString(byte[] bytes, String encoding) {
		if (bytes == null || bytes.length == 0) {
			return null;
		}
		ByteArrayOutputStream out = new ByteArrayOutputStream();
		ByteArrayInputStream in = new ByteArrayInputStream(bytes);
		try {
			GZIPInputStream ungzip = new GZIPInputStream(in);
			byte[] buffer = new byte[256];
			int n;
			while ((n = ungzip.read(buffer)) >= 0) {
				out.write(buffer, 0, n);
			}
			in.close();
			ungzip.close();
			return out.toString(encoding);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 以UTF-8来解压缩
	 * @param bytes
	 * @return
	 */
	public static String uncompressToString(byte[] bytes) {
		return uncompressToString(bytes, GZIP_ENCODE_UTF_8);
	}

	public static void main(String[] args) throws IOException {
		String s1 = "aaaaaaaa发来大家分厘卡氨基酸aaaaaaaaaaaaaaaaaaaaaaaa" + "aaf打大师看到啦的啦大垃圾袋埃里克附件是阿瑟东JFKaaaaaaaaaaaaaaaaa"
				+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
		String s = null;
		for (int i = 0; i < 20; i++) {
			s += s1;
		}
		System.out.println("字符串长度:" + s.length());
		System.out.println(compress(s));
		System.out.println("压缩后::" + compress(s).length);
		System.out.println("解压后:" + uncompress(compress(s)).length);
		System.out.println("解压字符串后::" + uncompressToString(compress(s)).length());
	}
}
//前端接收  需要先转换成JSON字符串,再将json字符串转换成json对象
var result = JSON.parse(JSON.stringify(data));
//打印出后台传过来的数据
console.log(result.result);
console.log(result.userGroupList);

你可能感兴趣的:(java)