目前我正在尝试从内容长度为37743的响应中读取一个不那么短的流。我正在使用read(char []缓冲区,int offset,int length),但是在比较时并未读取所有流它到我正在阅读的原始json文件。我试图检查这是否是一个常见问题,但我找不到任何可能导致这个问题的原因:
while ((reader.read(buffer, 0, buffer.length)) != -1)
sb.append(String.valueOf(buffer)); //sb is the String builder
注意当缓冲区长度发生变化时,结果会再次发生变化,例如:当更改为1024时,实现了使用8192缓冲区获得的相同结果加上另一段与原始json字符串不一致的文本。
答案 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);
}