3

我观察到 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 方法仅指示下一次读取是否不会因输入(真)或不(假)而被阻止,但我无法理解两个 Web 服务器环境之间其行为的差异。

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

提前致谢。

4

1 回答 1

4

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

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

您根本不应该依赖这种方法。我从未遇到过使用它有用的情况。

于 2013-07-07T09:31:16.783 回答