0

我正在阅读 a BufferedReader,它正在包装 a InputStreamReader。流来自一个 URLmyURL.openStream();

我正在尝试将流的一部分(和之间的字符startPosendPos读入 aString然后将其存储在文本文件中。

    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 或“底层流的就绪方法返回 false,表明进一步的输入请求将阻塞”时才会这样做。谁能告诉我这是什么意思?如果一个一个地读取字符可以正常工作,为什么会发生这种情况?(不能是EOF!)

4

1 回答 1

0

它很慢,因为数据到达缓慢。在接收代码中您无能为力。read(char[] ...)过早返回,因为在第一次读取阻塞后只有那么多字节到达。如果要读取特定数量的字符,则必须循环,调用read()read(char[], ...). 照原样BufferedReader,错误,缓冲,你打电话给哪个没有任何区别。

于 2012-10-24T03:23:26.487 回答