Gio*_*nJh 5 java servlets web-applications http
打电话有什么区别:
res.flushBuffer();
Run Code Online (Sandbox Code Playgroud)
相对
res.getOutputStream().flush();
Run Code Online (Sandbox Code Playgroud)
这些方法是否刷新相同的缓冲区?
如果是这样,你能给我一个关于 servlet 容器如何管理这个缓冲区的线索吗?
如果您一直用于getOutputStream写入正文,它们将刷新相同的缓冲区。另一种选择是getWriter针对非二进制数据。如果您一直在使用它,那么打电话res.getOutputStream().flush();可能不起作用。
缓冲区的管理方式是特定于实现的,但以Tomcat 实现之一为例。可以看到有一些字段是这样的:
/**
* The associated output buffer.
*/
protected OutputBuffer outputBuffer;
/**
* The associated output stream.
*/
protected CoyoteOutputStream outputStream;
/**
* The associated writer.
*/
protected CoyoteWriter writer;
Run Code Online (Sandbox Code Playgroud)
调用getOutputStream()创建一个CoyoteOutputStream使用outputBuffer此处显示的字段的 ,同样对于getWriter()。所以他们都会outputBuffer根据你使用的方式来使用它。flushBuffer只是这样做:
@Override
public void flushBuffer()
throws IOException {
outputBuffer.flush();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12936 次 |
| 最近记录: |