我正在阅读BufferedReader
,其中包含InputStreamReader
。该流来自包含myURL.openStream();
我正在尝试将一部分流(startPos
和endPos
之间的字符)读入String
,然后将其存储在文本文件中。
char[] buffer = new char[endPos-startPos];
reader.skip(startPos);
int i = 0;
while(i < (endPos-startPos)){
buffer[i] = (char) reader.read();
i++;
}
上面的代码有效,但看起来很慢。
我试图使用read(char[], int, int)
方法 - 我假设Java人员已经更快地实现了它!
然而 - 它通过在字符串中添加所需的字符然后完成大约一半,留给我半个完整的char数组。
根据Javadoc,只有当它达到EOF或“底层流的ready方法返回false,表明进一步的输入请求将被阻塞”时才会这样做。谁能告诉我这意味着什么?如果一个一个地阅读这些角色的工作正常,为什么会这样呢? (不能是EOF!)
答案 0 :(得分:0)
这很慢,因为数据来得很慢。在接收代码中你无能为力。 read(char[] ...)
过早返回,因为在第一次读取被阻止后只有那么多字节到达。如果您想要读取特定数量的字符,则需要调用read()
或read(char[], ...)
。由于BufferedReader
是错误的缓冲,所以你调用哪一个不会有任何区别。