BufferedReader就绪方法

时间:2013-07-07 09:06:43

标签: java servlets jetty tomcat7

我正在使用java.io.BufferedReader的ready方法观察一个奇怪的行为,该方法在Tomcat中返回false,而当在Jetty中运行相同的servlet时它返回true。

BufferedReader bufferedReader = httpRequest.getReader();
System.out.println(bufferedReader.ready());
/** Perform some read operation */

输出:

true //Jetty
false //Tomcat

据我所知,BufferedReader #ready方法仅指示下一次读取是否不会为输入阻塞(true)或不阻止(false),但我无法理解两个Web服务器之间的行为差​​异环境。

如果有人之前已经遇到过这种情况,我需要帮助更好地理解这一点吗?

提前致谢。

1 个答案:

答案 0 :(得分:4)

如果读者可以保证下一次读取不会阻止,则

ready()返回true。它返回false的事实并不能保证下一个读取将被阻塞,并且Reader实现被授权始终从此方法返回false。

Jetty和Tomcat是Java EE Web容器的两种不同实现,每种都提供自己的HttpServletRequest实现。因此,他们显然做出了不同的设计选择,但每个都尊重规范。

你应该完全不依赖这种方法。我从未遇到过使用它很有用的案例。