InputStreamReader.read()如何'不'读取已经读取的缓冲区?

时间:2016-02-29 23:39:32

标签: java android

我正在使用下面的代码,只是想知道为什么每当重复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();

1 个答案:

答案 0 :(得分:1)

InputStreamReader只是InputStream的包装。

任何InputStream只是操作系统提供的某些文件或套接字或其他资源的包装。

操作系统知道您读取的位置并将数据传送到从该位置开始的下一个读取操作,并相应地增加位置。或者,例如,对于套接字,它已经丢弃了您已经读过的数据。

它与ReaderInputStream没有任何关系。

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