如何解决使用扫描仪读取“干净的”文本文件时是否有任何解析?
我知道:
解析是将某种数据转换为另一种数据的过程 数据。
但是后来我也遇到了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
已针对它可以识别的特殊情况优化了算法。)
简而言之,“因为解析”并不是一个接口为什么比另一个接口慢的很好的解释。但是,您解析输入内容的方式越灵活和精确,期望的时间就越多。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。