BufferedReader java未到达文件末尾

时间:2013-01-02 21:32:51

标签: java file buffer bufferedreader

目前我正在尝试从内容长度为37743的响应中读取一个不那么短的流。我正在使用read(char []缓冲区,int offset,int length),但是在比较时并未读取所有流它到我正在阅读的原始json文件。我试图检查这是否是一个常见问题,但我找不到任何可能导致这个问题的原因:

  • 字符串构建器的最大长度?
  • char []的最大长度?
  • 缓冲区长度? (目前8192)
  • 条件不正确? (以下摘录)
while ((reader.read(buffer, 0, buffer.length)) != -1)
     sb.append(String.valueOf(buffer)); //sb is the String builder

注意当缓冲区长度发生变化时,结果会再次发生变化,例如:当更改为1024时,实现了使用8192缓冲区获得的相同结果加上另一段与原始json字符串不一致的文本。

2 个答案:

答案 0 :(得分:8)

你永远不应该忽略Reader.read()的结果。如果到达流的末尾,则返回-1。如果不是,则返回已读取的字符数。假设它准确读取你要求它读取的字符数是错误的。

将其更改为

while ((read = reader.read(buffer, 0, buffer.length)) != -1) {
    sb.append(buffer, 0, read);
}

答案 1 :(得分:5)

你应该使用:

编写sb对象
public StringBuilder append(char[] str,
                        int offset,
                        int len)

偏移量为0,len为来自reader.read的返回值

int len = 0;

while ((len = reader.read(buffer,0,buffer.length))!=-1) {
    sb.append(buffer,0,len);
}