java - 为什么在使用 BufferedReader 和 CharBuffer 时最后一次读取会附加额外的字符?
问题描述
当我运行以下代码时,输出为abcdefghijklmnopqrstuvwxyz12345678901234
.
为什么1234
即使最后一次读取应该只包含 6 个字符,也就是附加到最终字符串的位567890
?
这条线是如何(reader.read(dest)
工作的,最后一位来自哪里?
public static void main(String[] args)
{
CharBuffer dest = CharBuffer.allocate(10);
StringBuffer content = new StringBuffer();
try {
BufferedReader reader = new BufferedReader(new StringReader("abcdefghijklmnopqrstuvwxyz1234567890"));
while (reader.read(dest) > 0) {
dest.rewind();
content.append(dest.toString());
}
} catch (IOException e) {
System.out.println(e);
}
System.out.println(content.toString());
}
解决方案
第三步之后,您的字符缓冲区dest
包含uvwxyz1234
.
当您读取剩余的567890
时,您会覆盖缓冲区的前六个字符。这导致5678901234
.
推荐阅读
- algorithm - 在格子上随机布局对象的算法
- list - 有条件地附加到 Elixir 中的列表?
- c++ - mkoctfile 找不到包含 c++ 库头文件
- javascript - 尝试将 MERN 应用程序部署到 heroku 时出现错误
- module - 为什么我的主管使用 undef 在 start_child 上失败?
- java - 如何在 datepickerimpl 中禁用明天之前的日期?
- html - 为什么我可以使用百分比设置绝对定位元素的尺寸,即使它的父元素没有任何设置尺寸?
- java - 每天触发多个通知
- javascript - 迭代中的javascript typeof索引?
- laravel - Laravel 急切加载查询,其中 0 = 1