繁体   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