问题描述
我知道:
解析是将某种数据转换为另一种数据的过程 数据。
但是后来我也遇到了Scanner
和BufferedReader
之间的区别:
BufferedReader比Scanner快,因为BufferedReader不 需要解析数据。
所以我的问题是,如果我仅读取文本文件(纯字符)并且没有进行任何解析,则Scanner
的使用速度比BufferedReader
慢?有我不知道的解析吗?
或者从下面的代码角度来看,由于{strong>解析比使用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
的运行速度如何。
解决方法
将输入流划分为行是一种(非常有限的)解析形式,但是正如您所说的get()
也可以做到这一点。如果存在差异,则不同之处在于BufferedReader
可以使用高度优化的过程来实现单个用例(将流分成几行),而BufferedReader
需要能够更多灵活(将流划分为由任意字符串或正则表达式分隔的令牌)。灵活性几乎总是要付出代价的,尽管如果不进行一些基准测试就不会知道成本是多少。 (而且它可能很小,因为可以想到Scanner
已针对它可以识别的特殊情况优化了算法。)
简而言之,“因为解析”并不是一个接口为什么比另一个接口慢的很好的解释。但是,您解析输入内容的方式越灵活和精确,期望的时间就越多。