日期:2014-05-17  浏览次数:20777 次

请教一个关于servlet 中out.flush无效的问题

PrintWriter out = response.getWriter();
        for(int i=0;i<10;i++){
            Thread.sleep(1*1000);
            out.println("i="+i);
            out.flush();
        }
        out.close();


看起来应该是每秒钟向浏览器响应一次数据。但是结果不是这样的,是10秒以后才给所有数据全部响应回来。。
前端用的ajax。

PrintWriter out = response.getWriter();
        for(int i=0;i<10;i++){
            Thread.sleep(1*1000);
            out.println("i="+i);
            out.flush();
        }
        out.close();


请各位大神帮忙解答一下,谢谢!
------解决方案--------------------
  输入输出流一般都是用缓冲的,也就是说不是每次你要它读/写一个或少数几个字节,他就立马执行的,而是将这些请求放入缓冲,积累到一定量的时候才一起执行,以提高效率。

  本案例提问者认为1秒响应一次源于对out.flush机制的误解,根据上述理论,out.flush并非响应数据,而只是将缓存流数据转移到输出流中。

  以上解答如果有错误之处,望批评指正.


------解决方案--------------------
引用:
  输入输出流一般都是用缓冲的,也就是说不是每次你要它读/写一个或少数几个字节,他就立马执行的,而是将这些请求放入缓冲,积累到一定量的时候才一起执行,以提高效率。

  本案例提问者认为1秒响应一次源于对out.flush机制的误解,根据上述理论,out.flush并非响应数据,而只是将缓存流数据转移到输出流中。

  以上解答如果有错误之处,望批评指正.
+1