HTTP chunked-encoding缓冲Tomcat

时间:2015-03-10 15:36:01

标签: java http tomcat servlets buffer

请查看以下java Servlet doGet()方法:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
    response.setContentType("text/html;charset=utf-8");

    OutputStreamWriter osw = new OutputStreamWriter(response.getOutputStream(),"UTF-8");

    int j= 0;
    while(j < 2)
    {   
     String s = "";

     int i = 0;
     while(i<10000)
     {
      s = s + "a";
      i++;
     }

     System.out.println(s.length());
     osw.write(s,0,s.length());
     j++;
    }

    osw.flush();
}

使用Tomcat作为Servlet容器,会生成以下HTTP响应:

enter image description here

我意识到response.getOutputStream()为您提供了参考 套接字的实际OutputStream的装饰版本。

Tomcat对其进行修饰,以便使用HTTP响应主体的分块编码来处理持久连接。

我想知道为什么块是2000个十六进制字节(8192十六进制字节),看起来Tomcat总是在将它们发送到套接字输出流之前缓冲字节,这对我来说似乎是一种低效的工作方式。

换句话说,当我拨打电话时:

osw.write(s,0,s.length());

where s.lenght() > buffer_size

我希望大小为s.lenght()的HTTP块而不是维度的大小。{ Tomcat用于处理HTTP分块编码的缓冲区 希望这很清楚。

0 个答案:

没有答案