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

问题描述

我知道:

解析是将某种数据转换为另一种数据的过程 数据。

但是后来我也遇到了ScannerBufferedReader间的区别:

BufferedReader比Scanner快,因为BufferedReader不 需要解析数据。

所以我的问题是,如果我仅读取文本文件(纯字符)并且没有进行任何解析,则Scanner的使用速度比BufferedReader慢?有我不知道的解析吗?

或者从下面的代码角度来看,由于{strong>解析比使用ScannerBufferedReader呢?

//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的运行速度如何。

解决方法

将输入流划分为行是一种(非常有限的)解析形式,但是正如您所说的get()也可以做到这一点。如果存在差异,则不同之处在于BufferedReader可以使用高度优化的过程来实现单个用例(将流分成几行),而BufferedReader需要能够更多灵活(将流划分为由任意字符串或正则表达式分隔的令牌)。灵活性几乎总是要付出代价的,尽管如果不进行一些基准测试就不会知道成本是多少。 (而且它可能很小,因为可以想到Scanner已针对它可以识别的特殊情况优化了算法。)

简而言之,“因为解析”并不是一个接口为什么比另一个接口慢的很好的解释。但是,您解析输入内容的方式越灵活和精确,期望的时间就越多。