Готовый метод BufferedReader
Я наблюдаю странное поведение с готовым методом java.io.BufferedReader, который возвращает false внутри Tomcat, в то время как он возвращает true, когда тот же сервлет запущен в Jetty.
BufferedReader bufferedReader = httpRequest.getReader();
System.out.println(bufferedReader.ready());
/** Perform some read operation */
Выход:
true //Jetty
false //Tomcat
Я понимаю, что метод BufferedReader#ready только указывает, не заблокировано ли следующее чтение для ввода (true) или нет (false), но мне не удается понять разницу в его поведении между двумя средами веб-сервера.
Если кто-то уже сталкивался с этой ситуацией раньше, мне нужна помощь в понимании этого лучше?
Заранее спасибо.
1 ответ
ready()
возвращает true, если читатель может гарантировать, что следующее чтение не будет заблокировано. Тот факт, что он возвращает false, не гарантирует блокировку следующего чтения, и реализация Reader имеет право всегда возвращать false из этого метода.
Jetty и Tomcat - это две разные реализации веб-контейнера Java EE, каждая из которых имеет собственную реализацию HttpServletRequest. Таким образом, они, очевидно, сделали разные варианты дизайна, но каждый из них уважает спецификацию.
Вы не должны просто полагаться на этот метод. Я никогда не встречал случая, когда его использование было полезным.