2015-06-30 43 views
-1

我想知道BufferedReader是如何工作的?为什么使用InputStreamReader呢?它与Scanner类有何不同,它也被用于用户输入? 哪两个比较好?BufferedReader如何在java中工作

+5

http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html和http://docs.oracle.com/javase/7/docs/api/java/io /InputStreamReader.html和http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html – EpicPandaForce

+2

如果你想知道;你为什么不试着找出答案?就像你自己一样,在来这里之前做一些事先的研究,并要求其他人花时间**教你**。 – GhostCat

+1

我投票结束这个问题作为题外话,因为它既没有提出具体的编程问题,也没有表现出基本的努力水平。 – MarsAtomic

回答

4

的主要区别是

  1. 扫描仪是用于从流 的内容解析令牌,而只是BufferedReader中读取数据流,并没有做任何特殊 解析。 实际上,您可以将BufferedReader传递给扫描器,作为要解析的 字符的来源。
  2. 另一个区别是缓冲区的大小。扫描仪比BufferedReader有更多的缓冲区(1024字节,而不是 8192个字符)。虽然这可能听起来有相当大的差距,但扫描仪的缓冲区是,更多的是,这对于大多数任务来说足够了。
  3. 扫描仪也隐藏 IOExceptions而BufferedReader立即引发它们 ,这表明优点和缺点。
  4. 最后,当扫描器不是时,BufferedReader是同步的。如果您使用多个线程,请使用 BufferedReader。

你可能很容易发现这很容易搜索它。

Here's一个很好的链接。

3

BufferedReader

的Javadoc读取从字符输入流文本,缓冲字符,从而提供字符,数组和行的高效读取。

Scanner

一个简单的文本扫描仪可以解析使用正则表达式基本类型和字符串的javadoc。扫描器使用定界符模式将其输入分为令牌,默认情况下该定界符与空白相匹配。然后可以使用各种下一个方法将产生的令牌转换为不同类型的值。

基本上BufferedReader有效地读取字符。

Scanner在令牌中分割字符序列(类似于单词)并允许访问某些基本类型(或类)(如int, long, byte, double, String ...)。它是一个帮助类来解析输入,而不是缓冲它。