Mas*_*dul 8 java lambda bufferedreader java-8
我遇到了使用line()方法计算行号的问题BufferedReader.以下是test.txt文件内容.
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打印0而不是5?提前致谢.
Mar*_*eel 18
该BufferedReader.lines()方法返回一个流.访问流(例如,当您对其执行count()操作时)将从缓冲区读取行,移动当前位置BufferedReader.
当你这样做时count(),会读取整个流,所以BufferedReader()意志 - 可能 - 就在最后.第二次调用lines()将返回一个不读取任何行的流,因为读取器已经在其数据的末尾.
javadoc BufferedReader.lines()指定:
在执行终端流操作之后,不能保证读取器将处于从中读取下一个字符或行的特定位置.
我读到这意味着不能保证它是从流返回的最后一行之后立即,但由于计数消耗所有行,我很确定它是在最后.回到读者的开头(通常)是不可能的.
如果您需要对来自BufferedReader.lines()您的数据执行多个操作,则需要处理一次流,或者您需要将数据收集到临时存储中.但请注意,执行终端操作(如行数(或收集))可能永远不会完成(例如,如果BufferedReader从无限来源馈送).
| 归档时间: | 
 | 
| 查看次数: | 9557 次 | 
| 最近记录: |