目前我正试图从内容长度37743的响应中读取一个不那么短的流。我正在使用read(char[]缓冲区,int偏移量,int长度),但在将其与我正在读取的原始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字符串不一致的文本。
永远不要忽略Reader.read()
的结果。如果到达流的末端,它返回-1。如果不是,则返回已读取的字符数。假设它准确地读取你要求它读取的字符数是错误的。
改为
while ((read = reader.read(buffer, 0, buffer.length)) != -1) {
sb.append(buffer, 0, read);
}
您应该使用:
public StringBuilder append(char[] str,
int offset,
int len)
, offset为0,len为reader.read
的返回值int len = 0;
while ((len = reader.read(buffer,0,buffer.length))!=-1) {
sb.append(buffer,0,len);
}