首页 > 解决方案 > 为什么在使用 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());
  }

标签: java

解决方案


第三步之后,您的字符缓冲区dest包含uvwxyz1234.

当您读取剩余的567890时,您会覆盖缓冲区的前六个字符。这导致5678901234.


推荐阅读