java
/**
* 压缩数据包
*
* @param code
* @param data
* @param resp
* @throws IOException
*/
protected void writeZipResult(int code, Object data, HttpServletResponse resp) throws IOException {
resp.setHeader("Content-Encoding", "gzip");
// write到客户端
resp.setContentType("application/json;charset=utf-8");
ApiResult ret = new ApiResult();
ret.setData(data);
ret.setCode(code);
byte[] compressedData = null;
ByteArrayOutputStream baos = null;
GZIPOutputStream gzos = null;
byte[] bytes = null;
try {
baos = new ByteArrayOutputStream();
gzos = new GZIPOutputStream(baos);
bytes = JSON.toJSONString(ret).getBytes(StandardCharsets.UTF_8);
gzos.write(bytes);
gzos.finish();
compressedData = baos.toByteArray();
logger.info("Original data len:{} after compression len:{} compression rate:{}", bytes.length, compressedData.length, compressedData.length * 1.0 * 100 / bytes.length);
} catch (Exception e) {
logger.error("Compressed data is abnormal", e);
} finally {
if (gzos != null) {
gzos.close();
}
if (baos != null) {
baos.close();
}
}
if (compressedData != null) {
// 设置Content-Length
resp.setContentLength(compressedData.length);
resp.getOutputStream().write(compressedData);
resp.getOutputStream().flush();
}
}
压缩结果能达到 90%以上