请查看以下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响应:
我意识到response.getOutputStream()
为您提供了参考
套接字的实际OutputStream的装饰版本。
Tomcat对其进行修饰,以便使用HTTP响应主体的分块编码来处理持久连接。
我想知道为什么块是2000个十六进制字节(8192十六进制字节),看起来Tomcat总是在将它们发送到套接字输出流之前缓冲字节,这对我来说似乎是一种低效的工作方式。
换句话说,当我拨打电话时:
osw.write(s,0,s.length());
where s.lenght() > buffer_size
我希望大小为s.lenght()
的HTTP块而不是维度的大小。{
Tomcat用于处理HTTP分块编码的缓冲区
希望这很清楚。