如何用空格解析 BufferedReader()?

问题描述

遇到问题了。为什么两种 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,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 \0 用于小文件,或者将重复上一次迭代读取的值当文件大小 > 1024 时的最后一个循环。

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

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

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

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