2013-07-07 62 views
3

我正在觀察java.io.BufferedReader的ready方法的奇怪行爲,它在Tomcat中返回false,而在Jetty中運行同一個servlet時它返回true。BufferedReader就緒方法

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

輸出:

true //Jetty 
false //Tomcat 

我明白的BufferedReader#準備方法僅表示如果在下一次讀操作不會阻塞輸入(true)還是沒有(假),但我無法理解兩個Web服務器環境之間的行爲差​​異。

如果有人已經遇到過這種情況,我需要幫助理解這個更好?

在此先感謝。

回答

4

ready()如果讀者可以保證下一次讀取不會阻塞,則返回true。它返回false的事實並不能保證下一次讀取將被阻止,並且Reader實現被授權始終從此方法返回false。

Jetty和Tomcat是Java EE Web容器的兩種不同實現,每個實現都提供了自己的HttpServletRequest實現。因此他們顯然做出了不同的設計選擇,但他們每個人都遵守規範。

你應該根本不依賴這種方法。我從來沒有遇到過使用它的情況很有用。

+0

感謝您的回覆。這對我來說現在是有意義的。 FWIW,在我開始從緩衝區讀取內容之前,我正在使用ready()方法,我想最好的方法是使用readLine()方法代替它。 –