Java InputStreamReader.read()它是如何工作的';不是';已读缓冲区?
我在使用下面的代码,只是想知道为什么每次重复while循环时,inputBuffer都会从上次读取的末尾读取 是什么阻止它在循环过程中一直读取相同的500个字符?InputStreamReader就是这样构造的吗 下面是我从Java站点得到的信息 将字符读入数组。此方法将阻塞,直到某些输入可用、发生I/O错误或到达流的结尾 它确实说它一直读到结束,但是当它在第一个while循环中运行时,是什么阻止它假设已经到达结束,因为字符缓冲区大小小于整个InputStream 我有更多与此相关的代码,但我认为你们可以充分理解它是如何运行的Java InputStreamReader.read()它是如何工作的';不是';已读缓冲区?,java,android,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();
StringBuilder tempBuffer=new StringBuilder();
InputStream is=connection.getInputStream();
InputStreamReader isr=新的InputStreamReader(is);
int-charRead;
char[]inputBuffer=新字符[500];
while(true){
charRead=isr.read(inputBuffer);
if(charReadInputStreamReader
只是InputStream
的包装器
任何InputStream
都只是操作系统提供的某个文件、套接字或其他资源的包装器
操作系统知道您读取到的位置,并将数据发送到从该位置开始的下一个读取操作,并相应地增加该位置。或者,例如,对于套接字,它已经丢弃了您已经读取的数据
它与读取器
或输入流
没有任何关系
一个明显的例外是ByteArrayInputStream
,它提供自己的位置。它保持当前位置,因此下一次读取不会从开始读取,而是从原来的位置读取。因此这属于InputStreamReader本身的功能范围?因此,当它被读取到缓冲区时,它将“始终”记住保持其last读取位置?@HyperZI不知道它是如何实现的,我必须看一看。但我认为InputStreamReader保持着一个电流。好吧,谢谢你哦,哇,所以OS本身记住了位置?这其实很酷。所以当你说明显的异常时,你的意思是“ByteArrayInputStream”有自己的方法来保持re将数据读取到哪里,而不是操作系统必须正确处理数据?