tes*_*est 0 java buffer file bufferedreader
目前我正在尝试从内容长度为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
Run Code Online (Sandbox Code Playgroud)
注意当缓冲区长度被改变,结果再次改变,例如,当改为1024,与8192缓冲达到加上又是一段文字,这是不符合原来的JSON字符串一致得到相同的结果.
你永远不应该忽视结果Reader.read().如果到达流的末尾,则返回-1.如果不是,则返回已读取的字符数.假设它准确读取你要求它读取的字符数是错误的.
将其更改为
while ((read = reader.read(buffer, 0, buffer.length)) != -1) {
sb.append(buffer, 0, read);
}
Run Code Online (Sandbox Code Playgroud)
您应该使用以下命令编写sb对象:
public StringBuilder append(char[] str,
int offset,
int len)
Run Code Online (Sandbox Code Playgroud)
偏移量为0,len为来自reader.read的返回值
int len = 0;
while ((len = reader.read(buffer,0,buffer.length))!=-1) {
sb.append(buffer,0,len);
}
Run Code Online (Sandbox Code Playgroud)