簡體   English   中英

InputStreamReader.read()如何“不”讀取已讀取的緩沖區?

[英]InputStreamReader.read() how does it 'not' read already read buffers?

我使用下面的代碼,只是想知道為什么每當重復while循環時,inputBuffer都會從上次讀取的末尾讀取。

是什么阻止它隨着循環不斷地讀取相同的500個字符? 只是InputStreamReader的構造方式嗎?

因此,我從Java網站獲得的內容如下。

將字符讀入數組。 該方法將阻塞,直到某些輸入可用,發生I / O錯誤或到達流的末尾為止。

它確實說它一直讀到到達末尾,但是如果因為它在第一個while循環周圍時字符緩沖區的大小小於整個InputStream的大小,那么是什么阻止了它已經到達末尾呢?

我有一些與此相關的代碼,但是我想你們可以充分理解它的運行方式。

StringBuilder tempBuffer = new StringBuilder();

InputStream is = connection.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
int charRead;
char[] inputBuffer = new char[500];

while (true){
    charRead = isr.read(inputBuffer);
    if (charRead <=0){
    break;
    }
    tempBuffer.append(String.copyValueOf(inputBuffer, 0, charRead));
}

return tempBuffer.toString();

InputStreamReader只是周圍的包裝InputStream

任何InputStream都只是操作系統提供的某些文件或套接字或其他資源的包裝。

操作系統會知道您已從何處讀取數據,並將數據傳送到從該位置開始的下一個讀取操作,並相應地增加該位置。 或者,例如在使用套接字的情況下,它已經丟棄了您已經讀取的數據。

它與ReaderInputStream無關。

一個明顯的例外是ByteArrayInputStream ,它提供了自己的位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM