OutputStream的内容长度

问题描述 投票:0回答:1

我想在输出流的大小大于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();
  }

}

感谢您的帮助

java stream jersey inputstream outputstream
1个回答
0
投票

您可以直接在Web /应用程序服务器中启用gzip压缩,而无需放置自定义逻辑来启用GZip压缩。除非您有其他特定原因需要采用当前方法。

例如,服务器是Apache Tomcat,您可以执行此操作(https://examples.javacodegeeks.com/enterprise-java/tomcat/enable-gzip-compression-apache-tomcat/)。

© www.soinside.com 2019 - 2024. All rights reserved.