下面的代码似乎只在 StringBuilder 中写入了文件的一小部分 - 为什么?
Reader rdr = new BufferedReader(new InputStreamReader(new FileInputStream(...)));
StringBuilder buf = new StringBuilder();
CharBuffer cbuff = CharBuffer.allocate(1024);
while(rdr.read(cbuff) != -1){
buf.append(cbuff);
cbuff.clear();
}
rdr.close();
一些更多信息:该文件比 CharBuffer 大,而且我可以从调试器中看到 charbuffer 确实已按预期填充。唯一进入 StringBuilder 的部分似乎来自文件中间的某个位置。我使用的是openJDK7。 我想知道为什么它会表现出这样的行为以及如何解决这个问题。
最佳答案
正如 Peter Lawrey 提到的,您需要在读取和写入之间调用 cbuff.flip()
。看来追加将从缓冲区的位置读取,如果我们不调用cbuff.flip()
,则位于末尾。中间某处的一部分仍然被写入的原因是因为最终缓冲区不会被完全填满,因此一些“旧”字节仍然会位于缓冲区中的位置和缓冲区末尾之间。
谜团解开了:-)
关于java - 将文件读入 CharBuffer,然后 StringBuilder 或 StringBuffer 似乎遗漏了文件的某些部分。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13154468/