使用scanner读取“干净”文本文件时是否有任何解析?

nimxete2  于 2021-07-04  发布在  Java
关注(0)|答案(1)|浏览(358)

我知道:
解析是将某种数据转换成另一种数据的过程。
但后来我也发现了 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 因为解析而变慢,当我在技术上不解析任何数据时。。

j8ag8udp

j8ag8udp1#

将输入流分成行是一种(非常有限的)解析形式,但正如您所说 BufferedReader 我也能做到。如果有区别的话,那就是 BufferedReader 可以使用高度优化的过程来实现单个用例(将流划分为行),同时 Scanner 需要更加灵活(将流划分为由任意字符串或正则表达式分隔的标记)。灵活性几乎总是要付出代价的,尽管如果不做一些基准测试,你就不知道成本是多少(它可能很小,因为可以想象 Scanner 已针对特定情况优化了算法,可以识别。)
简而言之,“因为解析”并不能很好地解释为什么一个接口比另一个接口慢。但是,越灵活、越精确地解析输入,所需的时间就越长。

相关问题