首页 > 解决方案 > 如何用空格解决 BufferedReader()?

问题描述

有问题。为什么在两种选择情况下都是空白?(通过使用 readLine() 没问题。)

谢谢!

 String srcFile = "d:/javatest/File2String.txt";

 BufferedReader br = new BufferedReader(new FileReader(srcFile));

 char[] chs = new char[1024];

 int len = 0;

 //opt 1    while ((len = br.read(chs, 0, len)) != -1){   // Why are blanks with no endings???

 //opt 2    while ((len = br.read(chs)) != -1){           // Why are blanks with length of len???

 System.out.println(chs);

 }

标签: javacharbufferedreader

解决方案


System.out.println(chs);无论将多少个字符读入 chs,该行总是打印 1024 个字符。在 opt2 中,您读取len字符并打印 1024 个字符,因此当 len < 1024 时输出中会有额外的字符 - 这些\0用于小文件,或者当文件大小 > 1024 时,将重复上一次迭代读取的值以用于最终循环。

在 opt1 中,len 最初为零,因此您br.read(chs, 0, 0)在无限循环中调用。您要求读取 0 并返回 0 - len 永远不会更改,0因为每次读取都返回 0 并分配回len. 每次打印 1024 个值chs- 全部设置为\0.

您可以每次通过循环 i= 0 到 len 和 print 来打印确切的 chs 缓冲区内容System.out.print(chs[i]),或者在一个步骤中使用System.out.println(new String(chs, 0, len))但请注意,这是再次复制/复制内容。

如果您只是想将文件 cat/type 到当前控制台,您可以在没有 BufferedReader 的情况下使用:

try(var os = new FileInputStream(srcFile)) {
   os.transferTo(System.out);
}

推荐阅读