A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© adamjy 中级黑马   /  2014-4-3 21:19  /  1509 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Scanner和BufferedReader都是用来读取输入流的,他们有什么区别吗?Scanner是否开辟了缓冲区?

3 个回复

正序浏览
1.Scanner是SDK1.5新增的一个类,可是使用该类创建一个对象.
Scanner reader=new Scanner(System.in);
然后reader对象调用下列方法(函数),读取用户在命令行输入的各种数据类型: next.Byte(),nextDouble(),nextFloat,nextInt(),nextLin(),nextLong(),nextShot()
上述方法执行时都会造成堵塞,等待用户在命令行输入数据回车确认.例如,拥护在键盘输入12.34,hasNextFloat()的值是true,而hasNextInt()的值是false. NextLine()等待用户输入一个文本行并且回车,该方法得到一个String类型的数据。
2.Scanner是一个可以使用正则表达式来分析基本类型和字符串的简单文本扫描器!也就是控制台应用程序最为常用的文本输入方式!
BufferedReader是字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取!速度要比Scanner快!而且也可以设置缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。
3.下面是一个实例:如代码所示
  1. public class ScannerDemo{
  2.         public static void main(String args[]){
  3.         Scanner reader=new Scanner(System.in);
  4.         double sum=0;
  5.         int m=0;
  6.         while(reader.hasNextDouble()){
  7.             double x=reader.nextDouble();
  8.             m=m+1;
  9.             sum=sum+x;
  10.         }
  11.         System.out.printf("%d个数的和为%f/n",m,sum);
  12.         System.out.printf("%d个数的平均值是%f/n",m,sum/m);
  13.         }
  14. }
复制代码
回复 使用道具 举报
本帖最后由 多一点 于 2014-4-3 22:04 编辑


一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器。Scanner 应该是有一个1024Char字符的字符缓冲区,它的这个缓冲区不可以自定义, // Internal buffer used to hold input
    private CharBuffer  buf = CharBuffer.allocate(1024);


BufferedReader 这个有默认的缓冲区,也可以自定义缓冲区啦,个人觉得,不过这个比Scanner好用。






回复 使用道具 举报
Scanner一个可以使用正则表达式来分析基本类型和字符串的简单文本扫描器,用法为Scanner in = new Scanner(System.in),通过in.hasNextxxx()判断是否含有下一个或一行数据,in.nextxxx()读取数据,但是它对空格比较敏感,如果遇到就会返回数据。
Bufferreader是一个带缓冲区的缓冲字符输入流,它的缓冲区也可以指定大小,不过我们一般都使用它默认的大小,通常用来对文本文件的读取效率高
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马