使用 Scanner 读取 'clean' 文本文件时是否有任何解析?

Is there any parsing when reading 'clean' text file using Scanner?

我知道:

Parsing is the process of turning some kind of data into another kind of data.

但后来我也发现了ScannerBufferedReader之间的区别:

BufferedReader is faster than Scanner because BufferedReader does not need to parse the data.

所以我的问题是,如果我只阅读 文本文件 (纯字符)而我不是,那么使用 Scanner 比使用 BufferedReader 慢做任何解析?有没有我不知道的解析?

或者从以下代码的角度来看,这里 Scanner 为什么会因为 解析 比使用 BufferedReader 慢?

//1
BufferedReader bufferedReader = new BufferedReader(new FileReader("xanadu.txt"));
System.out.println(bufferedReader.readLine());
    
//2
Scanner scanner = new Scanner(new FileReader("xanadu.txt"));
scanner.useDelimiter("\n");
System.out.println(scanner.next());

我不明白 Scanner 是如何因为 解析 而变慢的,而我在技术上不解析任何数据..

将输入流分成几行是一种(非常有限的)解析形式,但正如您所说,BufferedReader 也可以做到这一点。如果有的话,区别在于 BufferedReader 可以使用 highly-optimised 过程来实现单个用例(将流分成几行),而 Scanner 需要能够更加灵活(将流分成由任意字符串或正则表达式分隔的标记)。灵活性几乎总是有代价的,尽管如果不进行一些基准测试,您将不知道该代价是多少。 (而且它可能很小,因为可以想象 Scanner 已经针对它可以识别的特定特殊情况优化了算法。)

简而言之,“因为解析”并不能很好地解释为什么一个界面比另一个界面慢。但是,您解析输入越灵活、越精确,预计花费的时间就越多。