Java 为什么普通servlet和Jersey servlet的输出缓冲行为不同?

Java 为什么普通servlet和Jersey servlet的输出缓冲行为不同?,java,servlets,jetty,jersey,embedded-jetty,Java,Servlets,Jetty,Jersey,Embedded Jetty,响应更改期间使用的输出缓冲行为和块数 这取决于响应是来自普通servlet还是来自Jersey容器servlet的资源 我正在使用一个虚拟servlet和一个虚拟Jersey资源进行测试。 两者都打印256个字符的倍数(255个“a”和1'\n',这些都不重要,只是随机选择) Jetty的默认输出缓冲区为32kB,当输出内容超过该大小时,如果未明确设置内容长度,Jetty将使用分块传输编码 但是,当从Jersey资源执行相同的测试时,无论输出大小如何,Jetty始终使用分块传输编码,并且分块的大

响应更改期间使用的输出缓冲行为和块数 这取决于响应是来自普通servlet还是来自Jersey容器servlet的资源

我正在使用一个虚拟servlet和一个虚拟Jersey资源进行测试。 两者都打印256个字符的倍数(255个“a”和1'\n',这些都不重要,只是随机选择)

Jetty的默认输出缓冲区为32kB,当输出内容超过该大小时,如果未明确设置内容长度,Jetty将使用分块传输编码

但是,当从Jersey资源执行相同的测试时,无论输出大小如何,Jetty始终使用分块传输编码,并且分块的大小为16kB而不是32kB

我浏览了两者的来源,但找不到原因。如果有人能分享他们对此的见解,我将非常高兴

Servlet测试代码

public class Test extends HttpServlet {
    private static final long serialVersionUID = 1L;

    private String baseString;

    public Test() {
        super();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 255 ; i++)
            sb.append("a");
        sb.append("\n");
        baseString = sb.toString();
     }

     private void writeOutput(int count, PrintWriter writer) {
        for (int i = 0; i<count; i++) {
            writer.print(baseString);
        }
     }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        response.setCharacterEncoding("UTF-8");
        writeOutput(Integer.parseInt(request.getParameter("count")),response.getWriter());
     }

}
@Path("/")
public class JerseyTest {

private String baseString;

public JerseyTest() {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < 255 ; i++)
        sb.append("a");
    sb.append("\n");
    baseString = sb.toString();
}

@GET
@Produces("text/html;charset=UTF-8")
public String get(@Context HttpServletResponse response,@QueryParam("count")int count) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i<count; i++) {
        sb.append(baseString);
    }
    return sb.toString();
}   
}
公共类测试扩展了HttpServlet{
私有静态最终长serialVersionUID=1L;
私有字符串基串;
公开考试(){
超级();
StringBuilder sb=新的StringBuilder();
对于(int i=0;i<255;i++)
某人附加(“a”);
某人附加(“\n”);
baseString=sb.toString();
}
私有void writeOutput(整数计数,PrintWriter){
对于(int i=0;i