扫描仪与BufferedReader
-
19-09-2019 - |
题
据我所知,两个最常用的方法的读数字基数据的一个文件是使用 Scanner
或 BufferedReader
.我也知道的 BufferedReader
阅读文件的有效使用一个缓冲区,以避免实物盘操作。我的问题是:
- 做
Scanner
执行以及BufferedReader
? - 为什么你会选择
Scanner
在BufferedReader
或反之亦然?
解决方案
Scanner
用于分析币从流的内容的同时 BufferedReader
只是读取流和不做任何特殊的分析。
事实上你可以通过一个 BufferedReader
来一个 scanner
作为来源字的分析。
其他提示
在目前的最新JDK6释的建立(b27), Scanner
有一个小的缓冲区(1024个字符)作为反对 BufferedReader
(8192字),但它是不够的。
作为选择,使用 Scanner
如果你想要 分析 该文件使用的 BufferedReader
如果你想要 阅读 该文件。也见的介绍性文本的其aforelinked API文件。
- 析 =的解释给出的输入令牌(部分).这是能够给你具体的部分,直接为int,string,小数,等等。也请参看所有那些
nextXxx()
方法Scanner
类。 - 阅读 =愚蠢的流。它保留给回你所有的人物,你又不得不手动检查如果您想到匹配,或者撰写的东西有用的。但如果你不需要做,无论如何,然后读取是足够的。
看看这个 链接, 下被援引:
一BufferedReader是一个简单的类意味着高效地读取 下属的流。一般来说,每个读请求由一个读者喜欢 FileReader导致相应的阅读的要求作 潜在的流。每个调用的read()或readLine()可以 因为字节可以从阅读该文件,转换成字符,, 然后返回,这可以效率非常低。效率提高 明显如果一个读者是扭曲在BufferedReader.
BufferedReader是同步的,所以读操作上的BufferedReader 可以安全地从多线程。
一个扫描器,另一方面具有更多的奶酪建成;它的 可以做所有这一BufferedReader可以做,并在同一级的 效率。然而,另外一个扫描仪可以分析 基础流为基本类型字符串中使用的常规 表达方式。它还可以标记的基础流的 分隔的选择。它还可以做前扫描的 基础流无视分隔!
一个扫描仪,但不是线的安全,它已将外部 同步。
选择使用BufferedReader或扫描器上取决于代码 你是书面的,如果你正在写一个简单的日志读取缓冲 读者是否足够。但是如果你正在写一XML parser扫描仪 是的更自然的选择。
甚至在阅读的投入,如果要接受用户输入线由 线,并说只是增加它的文件,BufferedReader是不够好。另一方面如果你要接受用户输入作为一个命令 多个选项,然后打算执行不同的操作 根据命令和指定的选项、扫描器将满足 更好。
BufferedReader
具有显着较大的缓冲存储器中于扫描仪。使用BufferedReader
如果你想要得到的长串流,并使用Scanner
如果你想要分析特定类型的token从流。Scanner
可以使用标记使用定义的分隔和分析流入的原始种类型的数据,同时BufferedReader
可以只读存储串。BufferedReader
是同步的话Scanner
不是。使用BufferedReader
如果您使用的是多线程。Scanner
隐藏IOException的话BufferedReader
把它扔了。
我建议使用 BufferedReader
对于阅读的文本。 Scanner
隐藏 IOException
同时 BufferedReader
把它扔了。
之间的差异 BufferedReader 和 扫描仪 如下:
- BufferedReader是 同步 但是扫描仪 不同步.
- BufferedReader是 线安全 但是扫描仪 不线安全.
- BufferedReader 具有较大的缓冲存储器 但是扫描仪 具有较小的缓冲存储器.
- BufferedReader是 速度更快 但是扫描仪 慢在执行.
代码阅读行从控制台:
BufferedReader:
InputStreamReader isr=new InputStreamReader(System.in); BufferedReader br= new BufferedReader(isr); String st= br.readLine();
扫描仪:
Scanner sc= new Scanner(System.in); String st= sc.nextLine();
以下是之间的差异BufferedReader和扫描仪
- BufferedReader只读数据,但扫描仪也分析数据。
- 你可以只读字符串中使用的BufferedReader,但你可以读int, 长期或浮动利用扫描仪。
- BufferedReader是老年人自扫描仪,它的存在从java1.1的话 扫描器加上JAVA5释放。
- 缓冲区的大小BufferedReader大(8KB)相比1KB 的扫描仪。
- BufferedReader更适合于阅读的文件长串 虽然扫描仪是更适合阅读小的用户输入从 命令提示。
- BufferedReader是同步的,但扫描仪是不是,这意味着你 不能共享的扫描仪在多线程。
- BufferedReader快于扫描器,因为它不花时间 在解析
- BufferedReader是快一点相比,扫描仪
- BufferedReader是从java。io包装和扫描仪是从java。工具包 在基础的要点,我们可以选择我们的选择。
感谢
主要的差异:
- 扫描仪
- 一个简单文字的扫描仪可以分析基本类型字符串中使用经常表达方式。
- 扫描器打破了它的输入令牌的使用符模式,其中通过默认相匹配的空白。所得到的令牌然后可以转换成价值的不同类型使用的各种下一个方法。
例
String input = "1 fish 2 fish red fish blue fish";
Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");
System.out.println(s.nextInt());
System.out.println(s.nextInt());
System.out.println(s.next());
System.out.println(s.next());
s.close();
印刷品以下产出:
1
2
red
blue
相同的输出可以产生与这样的代码,它使用一个定期表达式分析所有四个标记:
String input = "1 fish 2 fish red fish blue fish";
Scanner s = new Scanner(input);
s.findInLine("(\\d+) fish (\\d+) fish (\\w+) fish (\\w+)");
MatchResult result = s.match();
for (int i=1; i<=result.groupCount(); i++)
System.out.println(result.group(i));
s.close(); `
BufferedReader:
读文字输入流,缓冲字,以便提供有效的阅读的人物,阵列,线。
缓冲区的大小可以规定,或默认的大小可以使用。默认的足够大,对于大多数的目的。
在一般情况下,每个读请求由一个读者造成相应的阅读的要求作出的基础字或字节流。因此,最好换一个BufferedReader周围的任何读者的阅读()操作可能是昂贵的,例如FileReaders和InputStreamReaders.例如,
BufferedReader in
= new BufferedReader(new FileReader("foo.in"));
将缓冲区的输入指定的文件。没有缓冲,每个援引read()或readLine()可能导致字节可以从阅读该文件,转换成字,然后返回,这可以效率非常低。程序使用DataInputStreams文本输入可以进行本地化,通过更换各进与适当的BufferedReader.
资料来源:链接
有不同的方式把投入java,如:
1)BufferedReader2)扫描仪3)命令行参数
BufferedReader阅读的文本从一个字符的输入流,缓冲字,以便提供有效的阅读的人物,阵列,线。
在那里扫描仪是一个简单文字的扫描仪可以分析基本类型字符串中使用经常表达方式。
如果你正在写一个简单的日志读取缓冲读者是否足够。如果你正在写一XML parser扫描仪是一个更自然的选择。
欲了解更多信息,请参见:
在回答下面是从 读取从控制台:JAVA扫描仪vs BufferedReader
阅读时输入从控制台,有两种选择的存在是为了实现这一目标。第一次使用 Scanner
, 另一使用 BufferedReader
.他们都有不同的特点。这意味着差异如何使用它。
扫描处理给出的输入令牌。BufferedReader只是读一行行给出的输入为string。扫描仪,它自提供分析能力,就像nextInt(),nextFloat().
但是,什么是其他人之间的差异?
- 扫描处理给出的输入令牌。BufferedReader为流行/String
- 扫描器标记输入使用regex.使用BufferedReader必须编写额外的代码
- BufferedReader快于扫描仪*点。2
- 扫描仪不是同步的,BufferedReader同步
扫描仪来自JAVA1.5版本更高。
时应该使用扫描仪,或者缓冲的读者?
看在的主要差异之间他们两个,一是使用标记,其他人使用流行。当你需要分析的能力,使用扫描仪,而不是。但是,我更舒服的BufferedReader.当你需要读一个文件,使用BufferedReader,因为它是使用缓冲区的时候读一个文件。或者您可以使用的BufferedReader作为输入到扫描器。
BufferedReader将可能给你更好的性能(因为扫描器是基于InputStreamReader,看来源)。ups,用于阅读的文件,它使用仁王.当我试仁王业绩BufferedReader性能大的文件仁王显示了一个好一点的性能。- 对于阅读,从文件尝试Apache Commons IO.
我更喜欢 Scanner
因为它不扔检查的例外情况,因此它的使用情况的结果在一个更为精简的代码。