0

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

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

注意当缓冲区长度改变时,结果又改变了,例如当改变为1024时,得到了与8192缓冲区相同的结果加上另一段与原始json字符串不一致的文本。

4

2 回答 2

8

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

将其更改为

while ((read = reader.read(buffer, 0, buffer.length)) != -1) {
    sb.append(buffer, 0, read);
}
于 2013-01-02T21:35:30.907 回答
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);
}
于 2013-01-02T21:40:00.647 回答