我有一个servlet,它将字节写入其输出流。内容的大小可能很大。我想阻止servlet进行任何缓冲。 防止响应缓冲的最佳方法是什么?我不想自己调用ServletOutputStream上的flush()或close(),因为我认为servlet容器应该为我做这件事。 在这种情况下,如果servlet调用flush()和close()并且httpclient尚未读取字节,则字节驻留在何处。
答案 0 :(得分:2)
每个servlet容器都提供了HttpServletRequest和HttpServletResponse实现的幕后实现,这意味着你不知道一个容器内的后备impl是否缓冲了写入而另一个容器没有。
也就是说,缓冲将限制在一个小的多KB大小(如果它甚至完成),所以你可以简单地一遍又一遍地写入()到输出流而不用担心内存。 impl会将这些字节通过网络连接到网络连接,然后传输到网络硬件,操作系统和客户端代码的客户端,以缓冲和读取所有内容。
TCP将自动处理ACK并重新发送任何丢失的数据。
简而言之,您无需担心客户“赶上”;只需写出你的数据,客户端上的所有内容与TCP结合起来都会在那里获取数据。