java - res.flushBuffer() 与 res.getOutputStream().flush();

标签 java http web-applications servlets

调用有什么区别:

res.flushBuffer();

对比

res.getOutputStream().flush();  

这些方法是否刷新相同的缓冲区?

如果是这样,你能告诉我这个缓冲区是如何由 servlet 容器管理的吗?

最佳答案

如果您一直在使用 getOutputStream 写入正文,它们将刷新相同的缓冲区。另一种选择是用于非二进制数据的 getWriter。如果您一直在使用它,那么调用 res.getOutputStream().flush(); 可能行不通。

缓冲区的管理方式是特定于实现的,但采用 one of the Tomcat implementations for example .可以看到有这样一些字段:

/**
 * The associated output buffer.
 */
protected OutputBuffer outputBuffer;
/**
 * The associated output stream.
 */
protected CoyoteOutputStream outputStream;
/**
 * The associated writer.
 */
protected CoyoteWriter writer;

调用 getOutputStream() 创建一个 CoyoteOutputStream,它使用那里显示的 outputBuffer 字段,同样适用于 getWriter()。所以他们都会使用 outputBuffer 取决于你使用哪个。 flushBuffer 就是这样做的:

@Override
public void flushBuffer()
    throws IOException {
    outputBuffer.flush();
}

关于java - res.flushBuffer() 与 res.getOutputStream().flush();,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13318024/

相关文章:

java - 开发人员计算机的防病毒(Symantec Endpoint)配置

database - 如何在 Dropwizard 项目(Angular 7 前端)中创建并开始使用嵌入式 Apache Derby 数据库

django - 插入 Django 网络应用程序中的基本安全漏洞

ruby-on-rails - Rails 2 与 Rails 3

c# - 如何以编程方式将 ASP.NET 页面重新加载为新 session ,就像第一次访问该页面一样

java - Swing drop 回调期间是否禁止更改组件层次结构?

java - 如何通过传递 json URL 使 URL 中的空格可读

java - 创建 Stream 后更改 Stream 源时 Stream 的行为

linux - 如何从 perl 进行经过身份验证的 https 访问

java - 在 webapp 中建模用户约束的最佳实践?