2012-10-23 70 views
0

我正在閱讀BufferedReader,該文件正在打包InputStreamReader。流來自於與myURL.openStream();BufferedReader讀取(char [],int,int)是否被阻塞?

我想讀(startPosendPos之間的字符)流的部分爲String,然後將其存儲在一個文本文件的URL。

char[] buffer = new char[endPos-startPos]; 
    reader.skip(startPos); 
    int i = 0; 
    while(i < (endPos-startPos)){ 
     buffer[i] = (char) reader.read(); 
     i++; 
    } 

上面的代碼工作,但似乎很慢。 我試圖用read(char[], int, int)方法代替 - 我假設Java人已經更快地實現了它!

但是,它通過在字符串中添加所需字符然後完成,讓我有一個完整的字符數組。

根據Javadoc,它只會在達到EOF時執行此操作,或者「底層流的就緒方法返回false,表示進一步的輸入請求會阻塞」。誰能告訴我這是什麼意思?爲什麼如果一個一個地閱讀字符,它會發生什麼情況? (不能是EOF!)

+0

爲什麼你認爲讀取數組對於緩衝讀取器來說要快得多?它是緩衝的! – bmargulies

+0

爲什麼不直接說'

+0

需要多長時間閱讀url?你應該期望IO操作的高延遲,如這個 – amit

回答

0

由於數據緩慢到達,速度很慢。在接收的代碼中你無能爲力。 read(char[] ...)過早返回,因爲在第一次讀取之後只有很多字節被阻止。如果您想要讀取特定數量的字符,則必須調用read()read(char[], ...)。由於BufferedReader是錯誤的緩衝,所以你調用哪一個不會有什麼區別。