BufferedReader的ready方法

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 方法仅指示下一次读取是否会受阻(输入为 true,否则为 false),但我无法理解其在两个 Web 服务器环境之间行为差异的区别。
如果有人之前已经遇到过这种情况,我需要帮助更好地理解它?
提前致谢。
1个回答

4

ready()方法返回True,如果阅读器可以保证下一次读取不会被阻塞。它返回False并不意味着下一次读取将被阻塞,Reader实现有权始终从该方法返回False。

Jetty和Tomcat是Java EE Web容器的两种不同实现,并且每个容器都提供了自己的HttpServletRequest实现。它们显然做出了不同的设计选择,但每个容器都遵守规范。

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


感谢您的回复。现在我明白了。 顺便说一下,我之前是在使用ready()方法之后才开始从缓冲区读取内容,我想最好的方法是改用readLine()方法。 - A Null Pointer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接