簡體   English   中英

Java 8 BufferedReader lines()方法打印不同的計數

[英]Java 8 BufferedReader lines() method prints different count number

我遇到了使用BufferedReader lines()方法計算行號的問題。 以下是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 提前致謝。

BufferedReader.lines()方法返回一個流。 訪問流(例如,當你對它執行count()時),將從緩沖區讀取行,向前移動BufferedReader的當前位置。

當你執行count() ,會讀取整個流,因此BufferedReader()可能會在結尾處。 第二次調用lines()將返回一個不讀取任何行的流,因為讀取器已經在其數據的末尾。

BufferedReader.lines()的javadoc指定:

在執行終端流操作之后,不能保證讀取器將處於從中讀取下一個字符或行的特定位置。

我讀到這意味着不能保證它是從流返回的最后一行之后立即,但由於計數消耗所有行,我很確定它是在最后。 回到讀者的開頭(通常)是不可能的。

如果需要對BufferedReader.lines()的數據執行多個操作,則需要處理一次流,或者需要將數據收集到臨時存儲中。 但請注意,執行終端操作(如行數(或收集))可能永遠不會完成(例如,如果BufferedReader來自無限源)。

來自Javadoc

在執行終端流操作之后,不能保證讀取器將處於從中讀取下一個字符或行的特定位置。

count()是一個終端操作。 因此,在第一次count() call之后,未指定閱讀器的位置。

java 8 API 此指定

在執行終端流操作之后,不能保證讀取器將處於從中讀取下一個字符或行的特定位置。

因此,執行br.lines().count()語句后,指針的位置無法保證。

lines().count()調用使用文件中的數據,並在不關閉流時再次調用。 它不能通過調用br.lines().count()再次使用相同的數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM