【发布时间】:2016-02-29 23:39:31
【问题描述】:
我正在使用下面的代码,只是想知道为什么每当重复 while 循环时,inputBuffer 会从上次读取的末尾读取。
是什么阻止它在循环运行时一直读取相同的 500 个字符? InputStreamReader 就是这么构造的吗?
所以我从 Java 网站得到的内容如下。
将字符读入数组。此方法将阻塞,直到某些输入可用、发生 I/O 错误或到达流的末尾。
它确实说它会读取直到到达结尾,但是什么阻止它假设已经到达结尾,因为字符缓冲区大小小于整个 InputStream 在第一个 while 循环时?
我有更多与此相关的代码,但我认为你们可以充分理解它是如何进行的。
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 本身的功能范围内吗?所以当它被读取到缓冲区时,它会“总是”记住保持它的最后读取位置? @HyperZ
-
我不知道它是如何实现的,我得看看它。但我认为 InputStreamReader 保持电流。
-
好的,谢谢