BufferedReader读取(char [],int,int)是否被阻止?

时间:2012-10-23 22:15:55

标签: java bufferedreader

我正在阅读BufferedReader,其中包含InputStreamReader。该流来自包含myURL.openStream();

的网址

我正在尝试将一部分流(startPosendPos之间的字符)读入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!)

1 个答案:

答案 0 :(得分:0)

这很慢,因为数据来得很慢。在接收代码中你无能为力。 read(char[] ...)过早返回,因为在第一次读取被阻止后只有那么多字节到达。如果您想要读取特定数量的字符,则需要调用read()read(char[], ...)。由于BufferedReader是错误的缓冲,所以你调用哪一个不会有任何区别。