我想在输出流的大小大于100个字节时进行gzip压缩。我正在尝试各种方法,但无法从输出流中获取内容长度。httpheader中的内容长度不正确
请您帮助我如何找到输出流的长度
@Provider
@Compress
public class GzipInterceptor implements WriterInterceptor {
@Context
private HttpHeaders httpHeaders;
@Override
public void aroundWriteTo(WriterInterceptorContext context)
throws IOException, WebApplicationException {
List<String> acceptEncoding = null;
if (httpHeaders != null) {
MultivaluedMap<String, String> requestHeaders = httpHeaders.getRequestHeaders();
acceptEncoding = requestHeaders.get(HttpHeaders.ACCEPT_ENCODING);
}
if (acceptEncoding != null) {
for (String s : acceptEncoding) {
if (s.contains(“gzip”)) {
MultivaluedMap<String, Object> headers = context.getHeaders();
OutputStream os = context.getOutputStream();
if(//content-legth greater than 100 bytes)//I need some help here {
headers.add(HttpHeaders.CONTENT_ENCODING, “”gzip”);
context.setOutputStream(new GZIPOutputStream(os));
}
break;
}
}
}
context.proceed();
}
}
感谢您的帮助
您可以直接在Web /应用程序服务器中启用gzip压缩,而无需放置自定义逻辑来启用GZip压缩。除非您有其他特定原因需要采用当前方法。
例如,服务器是Apache Tomcat,您可以执行此操作(https://examples.javacodegeeks.com/enterprise-java/tomcat/enable-gzip-compression-apache-tomcat/)。