java - 如何用空格解决 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);
}
解决方案
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);
}
推荐阅读
- android - 如何在 Android 中正确设置 google play 登录?
- excel - 结构化引用与显式单元格引用
- java - 无法使用 Mapstruct 生成没有输入参数的映射方法
- postgresql - Postgres 选择并合并行
- swift - 如何解开可选项,我如何编写此代码以使其没有任何选项?或者 !在里面,或者有可能吗?
- azure - 是否可以使用 Azure API 管理全局属性的计算名称?
- javascript - 给定一个整数列表,找出列表中出现频率最高的整数
- amazon-web-services - 为 Fargate 服务创建的目标组中的健康检查路径应该是什么
- reactjs - 如何将'postcss config'添加到laravel mix?
- postgresql - 查找日期之间的天数