Java Web 中的 PrintWriter out = response.getWriter()

ZhangFinder 发布于 2015/05/27 19:05
阅读 1K+
收藏 0

 在JavaWeb中通过ajax或jquery向JSP页面传送数据时会用到PrintWriter out = response.getWriter() ;out.print(data);网上的程序中有人在后面加了out.flush();有的人还加了out.close();     

我发现不加out.flush(); out.close();   程序也是可以跑通的。我想问JSP网站如果长期运行,不加out.flush();会造成什么后果?不加out.close();又会造成什么后果?out.flush(); out.close();   是不是可有可无的?

麻烦各位有经验的大神帮我解答下。


加载中
0
Jack_Q
Jack_Q
内存溢出
0
水至浅
水至浅

带缓存的数据流的,会有一个缓冲,也就是byte数组。一般都是byte数据到一定程度的时候,才会输出数据。

flush就相当于强制立刻输出数据了。close顾名思义就是关闭流。关闭的时候有可能缓存中还有数据,而没有来得及输出。

这里呢,你去看一下源码吧,有没有缓存。有些输出流类的flush方法直接就是一个空,什么也没有。

当然最后flush一下是个好习惯。

0
darkdada
darkdada

如果flush close在servlet方法(get post put....)的最后,那这是不必要的,因为servlet引擎会在用户态servlet方法返回后检查response流,并作flush和close

如果flush close在servlet方法的中部,并且后面会有不定时或者耗时的操作,需要立即发送相应,那么就要flush就立即写入socket了。而close是不必要,除非你明确的知道需要立即关闭socket,就是因为servlet引擎会做这个事。

0
ZhangFinder
ZhangFinder

引用来自“vyong”的评论

如果flush close在servlet方法(get post put....)的最后,那这是不必要的,因为servlet引擎会在用户态servlet方法返回后检查response流,并作flush和close

如果flush close在servlet方法的中部,并且后面会有不定时或者耗时的操作,需要立即发送相应,那么就要flush就立即写入socket了。而close是不必要,除非你明确的知道需要立即关闭socket,就是因为servlet引擎会做这个事。

学习了
返回顶部
顶部