2012-01-25 42 views
4

我正在使用Java中的HttpURLConnection讀取大型xml文件,如下所示。在完成讀取之前獲取加載到緩衝讀取器的字節總數

StringBuilder responseBuilder = new StringBuilder(1024); 
char[] buffer = new char[4096]; 

BufferedReader br = new BufferedReader(new InputStreamReader(((InputStream)new DataInputStream(new GZIPInputStream(connection.getInputStream()))),"UTF-8")); 

int n = 0; 
while(n>=0){ 
    n=br.read(buffer,0,buffer.length); 
    if(n>0) responseBuilder.append(buffer,0,n); 

} 

有沒有什麼方法可以在讀完char之前,通過char/char/char char/char來獲得加載到BufferedReader的總字節數。

+0

如果你根據這些信息解釋你想要做什麼,那麼也許有人可能會建議最好的方法去做。 – DaveJohnston

+0

Thanx戴夫。我需要它來實現幾個功能,如1.生成一個進度條,指示構建文件與加載數據到緩衝區的百分比,2.檢查是否構建了完整的加載文件以及由於發生異常而丟失了多少百分比像「Out of Memory」(因爲這是一個大文件)等。 – namalfernandolk

回答

2

這聽起來像你試圖找出BufferedReader的大小,而不消耗它。

您可以嘗試使用HttpURLConnectiongetContentLength()方法。這可能會或可能不會工作。它當然不會做的是給你的流的大小的壓縮。如果是後者,那麼你幾乎肯定會走運。

如果我誤解了你的問題,請澄清你究竟是什麼。

+0

Thanx aix。但是當我嘗試getContentLength()時,它返回-1,這意味着內容長度未知。 – namalfernandolk

0

如果已設置內容長度標題,則可以通過連接訪問它。但是如果內容已被壓縮,那麼它可能不會被設置,或者可能會給出壓縮的大小,我假設您正在尋找未壓縮的大小。

+0

Thanx Dave.Yep。我在未壓縮的大小之後。 – namalfernandolk