我知道:
解析是将某种数据转换成另一种数据的过程。
但后来我也发现了 Scanner
以及 BufferedReader
:
bufferedreader比scanner快,因为bufferedreader不需要解析数据。
所以我的问题是如何使用 Scanner
比使用慢 BufferedReader
如果我只读取文本文件(纯字符),而没有进行任何解析?有什么我不知道的解析吗?
或者从以下代码的Angular 来看,这里是什么 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条答案
按热度按时间j8ag8udp1#
将输入流分成行是一种(非常有限的)解析形式,但正如您所说
BufferedReader
我也能做到。如果有区别的话,那就是BufferedReader
可以使用高度优化的过程来实现单个用例(将流划分为行),同时Scanner
需要更加灵活(将流划分为由任意字符串或正则表达式分隔的标记)。灵活性几乎总是要付出代价的,尽管如果不做一些基准测试,你就不知道成本是多少(它可能很小,因为可以想象Scanner
已针对特定情况优化了算法,可以识别。)简而言之,“因为解析”并不能很好地解释为什么一个接口比另一个接口慢。但是,越灵活、越精确地解析输入,所需的时间就越长。