我实际测试了一下,
感觉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();
%>
作者:xymyqueen
来源:CSDN
原文:https://blog.csdn.net/xymyqueen/article/details/52083426
直接跟踪下源码研究一下何如?