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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘泰 中级黑马   /  2012-3-27 19:59  /  1463 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在java中输入有二种方式:
1:用BufferedReader
  BufferedReader br = new BufferedReader(new Inputstream(System.in));


BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
创建了一个BufferedReader对象, 名字是br , 然后new, 传入了一个InputStream对象.因为使用了BufferedReader的构造方法,
BufferedReader是缓冲流, INputStream是字节流
可以想象成一个水管, 在INputStream外面包了一层, 以供读取方便, 就简单理解成, InputStream这个水管一下只能有一滴水从这里通过, 而BufferedReader套在这个水管上, 就可以一下读一串水流
system.in  是放到标准的键盘设备上

2:用Scanner
  Scanner input = new Scanner(System.in);
  String str = input.nextLine();//还可以用别的方法来获取,int,char,double

System.in 和使用Bufferedreader一样。


我想请问一下,这二个有什么区别,在什么样的情况下,用什么样的输入方式好呢?

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

3 个回复

倒序浏览
BufferedReader
从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。

可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。

Scanner一个可以使用正则表达式来分析基本类型和字符串的简单文本扫描器。

Scanner 使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配。然后可以使用不同的 next 方法将得到的标记转换为不同类型的值。

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
BufferedReader
从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。

可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。

通常,Reader 所作的每个读取请求都会导致对基础字符或字节流进行相应的读取请求。因此,建议用 BufferedReader 包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和 InputStreamReader)。
           Scanner取得输入数据的依据是空格符:如按下空格键,Tab键或者Enter键,Scanner就会返回下一个输入。所以说Scanner不能输入空格,如果你希望取得含有空格的字符串BufferedReader可以做到。
回复 使用道具 举报
我查阅了下API文档,
Scanner input = new Scanner(System.in);
   String str = input.nextLine();
   String str = input.nextInt(); 这句读入的是下一个int型数据,即可以指定读入的是什么类型的数据,读入的是一个还是一行等等,
如果通过键盘输入的不是,则会发生异常。
   回过来看第一种:
   BufferedReader br = new BufferedReader(new Inputstream(System.in));
   这里就没有指定了。
  这是两者的一个区别吧。
  本人理解,不知对否



回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马