java使用扫描器读取“干净”文本文件时,是否有任何解析?
我知道:
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
会因为解析而变慢,而从技术上讲,我并没有解析任何数据
# 1 楼答案
将输入流分成行是一种(非常有限的)解析形式,但正如您所说的
BufferedReader
也可以做到这一点。如果有区别的话,那就是BufferedReader
可以使用高度优化的过程来实现单个用例(将流划分为行),而Scanner
需要能够更加灵活(将流划分为由任意字符串或正则表达式分隔的标记)。灵活性几乎总是有代价的,尽管如果不做一些基准测试,你就不知道成本是多少。(而且它可能非常小,因为可以想象Scanner
针对它能够识别的特殊情况优化了算法。)简而言之,“因为解析”并不能很好地解释为什么一个接口比另一个接口慢。但是,越灵活、越精确地解析输入,所需的时间就越长