我观察到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服务器环境中的行为差异。
如果以前有人遇到过这种情况,我需要帮助才能更好地理解这种情况?
提前谢谢。
发布于 2013-07-07 17:31:17
如果读取器可以保证下一次读取不会阻塞,则ready()返回true。它返回false这一事实并不能保证下一次读取将阻塞,并且Reader实现被授权总是从该方法返回false。
Jetty和Tomcat是Java容器的两个不同的实现,每个都提供了自己的HttpServletRequest实现。因此,他们显然做出了不同的设计选择,但他们每个人都尊重规范。
您不应该简单地依赖此方法。我从来没有遇到过使用它有用的案例。
https://stackoverflow.com/questions/17510690
复制相似问题