使用 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.
但后来我也发现了Scanner
和BufferedReader
之间的区别:
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
已经针对它可以识别的特定特殊情况优化了算法。)
简而言之,“因为解析”并不能很好地解释为什么一个界面比另一个界面慢。但是,您解析输入越灵活、越精确,预计花费的时间就越多。
我知道:
Parsing is the process of turning some kind of data into another kind of data.
但后来我也发现了Scanner
和BufferedReader
之间的区别:
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
已经针对它可以识别的特定特殊情况优化了算法。)
简而言之,“因为解析”并不能很好地解释为什么一个界面比另一个界面慢。但是,您解析输入越灵活、越精确,预计花费的时间就越多。