java - BufferedReader java未到达文件末尾

标签 java file buffer bufferedreader

目前,我正在尝试从内容长度为 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 字符串不一致的文本。

最佳答案

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

更改为

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

关于java - BufferedReader java未到达文件末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14129523/

相关文章:

java - 无法读取 VR 路径注册表

Java - 在目录中搜索文件

Android:在外部存储上找不到文件

c++ - 在 C++ 中转换为 double 时处理异常

mysql - 在 Node.js 中解密 MySQL 的 AES_ENCRYPT

java - Instanceof Collection 未按预期运行

java - mvn spring-boot :run slow compared to java -jar xxx. jar

java - 在 Java 中将 double 值转换为字节数组的最佳和有效方法

google-chrome - 是否可以在 WebRTC (Chrome/Chromium) 中禁用 jitter buffer

java - android - 蓝牙适配器 - 消息处理程序缓冲区限制