javaee,out的clear()与clearBuffer()区别?

我实际测试了一下,
感觉clear()与clearBuffer()区别不大

我感觉到的原理是:两者都会清除在他们之前加载到缓冲区的内容,这意味着网页上不会看到这些内容
而且clear,clearBuffer检测到缓冲区为空的时候会抛出异常
(用out.flush()进行检测的)


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>problem test page</title>
  </head>
  <body>
            <p> 啦啦啦</p>
    <%
        StringBuffer str = new StringBuffer("呵呵");
        out.print(str);
                 //out.flush();
        //out.clear();
                //out.clearBuffer();
         if (response.isCommitted()){
            out.print("TRUE");
        }
        else {
            out.print("FALSE");
        }
    %>
  </body>
</html>

看定义是:clearBuffer()清除缓冲区数据,将数据写到客户端
clear()清除缓冲区数据, 不输出到客户端且刷新缓存时抛出异常
那么真正的区别是什么?clearBuffer定义的效果没有实现?

clear():用来清除输出缓冲区。这种方法不写任何内容到客户机。该方法抛出异常,如果缓冲被刷新。

"这里是页面输出的内容"

<%

out.clear();

%>

这样页面不会有任何显示(输出内容被清除了),如果在clear()之前,加入flush(),则会抛出异常:

java.io.IOException: Error: Attempt to clear a buffer that's already been flushed.

clearBuffer():清除输出缓冲区。这种方法不写任何内容到客户机.

"这里是页面输出的内容"

<%

out.clearBuffer();

%>

这样书写,页面不会有任何显示.如果在clearBuffer()之前加入flush().页面则会显示内容.

作者:xymyqueen
来源:CSDN
原文:https://blog.csdn.net/xymyqueen/article/details/52083426

直接跟踪下源码研究一下何如?