我遇到了使用lines()方法计算行号的问题BufferedReader
。以下是内容test.txt
file.
1 Career
2 Filmography
3 Awards
4 References
5 External
这是计算行数两次的源代码。
BufferedReader br=new BufferedReader(new FileReader(new File("test.txt")));
long lineNo=br.lines().count();
long lineNo2=br.lines().count();
System.out.println(lineNo); // 5
System.out.println(lineNo2);// 0
在这里,我有疑问为什么第二行lineNo2
print 0
代替5
?提前致谢。
The BufferedReader.lines()
方法返回一个流。访问流(例如,当您执行count()
上),将从缓冲区中读取行,移动当前位置BufferedReader
向前。
当你做一个count()
,整个流被读取,所以BufferedReader()
可能会在最后。第二次调用lines()
将返回一个不会读取任何行的流,因为读取器已经位于其数据的末尾。
的 javadocBufferedReader.lines() http://docs.oracle.com/javase/8/docs/api/java/io/BufferedReader.html#lines--指定:
执行终端流操作后,不能保证读取器将位于读取下一个字符或行的特定位置。
我读到这意味着不能保证它紧接在从流返回的最后一行之后,但由于计数消耗了所有行,所以我很确定它是在最后。回到读者的开头(通常)是不可能的。
如果您需要对来自的数据执行多个操作BufferedReader.lines()
您要么需要处理一次流式传输,要么需要将数据收集到临时存储中。但请注意,执行像行计数(或收集)这样的终端操作可能永远不会完成(例如,如果BufferedReader
由无限源供给)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)