如何用空白解析 BufferedReader()?

How to resolve BufferedReader() with blanks?

遇到问题。为什么两个 opt 案例中都是空白? (通过使用 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);

 }

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

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

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

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

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