Scanner vs. BufferedReader

据我所知,在Java中从文件中读取基于字符的数据的两种最常用的方法是使用或。我还知道,通过使用缓冲区来避免物理磁盘操作,可以有效地读取文件。ScannerBufferedReaderBufferedReader

我的问题是:

  • 性能是否与 ?ScannerBufferedReader
  • 你为什么会选择而不是反之亦然?ScannerBufferedReader

答案 1

Scanner用于从流的内容解析令牌,同时仅读取流,而不执行任何特殊解析。BufferedReader

实际上,您可以将 a 传递给 a 作为要解析的字符源。BufferedReaderscanner


答案 2

在当前最新的 JDK 18 版本/构建 (b37) 中, BufferedReader8192 个字符)相比,Scanner 具有较小的缓冲区(1024 个字符),但绰绰有余。

至于选择,如果要解析文件,请使用 如果要逐行读取文件。另请参阅其上述 API 文档的介绍性文本。ScannerBufferedReader

  • 解析 = 将给定的输入解释为标记(部分)。它能够直接以int,字符串,十进制等方式回馈您特定的部分。另请参阅类中的所有这些方法。nextXxx()Scanner
  • 阅读 = 哑流。它不断回馈你所有的角色,如果你想匹配或撰写有用的东西,你必须手动检查。但是,如果您无论如何都不需要这样做,那么阅读就足够了。