黑马程序员技术交流社区

标题: 从键盘输入数据,用Scanner还是InputStream?哪个更好? [打印本页]

作者: Huylens    时间: 2015-5-6 11:17
标题: 从键盘输入数据,用Scanner还是InputStream?哪个更好?
从键盘输入数据,用Scanner还是InputStream?哪个更好?

作者: 大西洋    时间: 2015-5-6 13:08
接收键盘输入用Scanner
  1. Scanner scan = new Scanner(System.in);
复制代码


Inputstream是用来读取文件的。
作者: Huylens    时间: 2015-5-6 13:46
大西洋 发表于 2015-5-6 13:08
接收键盘输入用Scanner

InputStream也可以用来做键盘输入数据,只是麻烦点
具体的过程如下:
//获取键盘录入对象。
InputStream in = System.in;
//将字节流对象转成字符流对象,使用转换流。InputStreamReader
InputStreamReader isr = new InputStreamReader(in);
//为了提高效率,将字符串进行缓冲区技术高效操作。使用BufferedReader
BufferedReader bufr = new BufferedReader(isr);
简单点些就是
BufferedReader bufr =
                                new BufferedReader(new InputStreamReader(System.in));
在JAVA自学课程中的第19天的课程中有讲解。
只是我疑问,Scanner和InputStream两种的办法,各自的优缺点在哪里?
或者这样说,在做项目开发的时候用的是哪种办法,为什么?
作者: 大西洋    时间: 2015-5-6 14:31
本帖最后由 大西洋 于 2015-5-6 14:50 编辑
Huylens 发表于 2015-5-6 13:46
InputStream也可以用来做键盘输入数据,只是麻烦点
具体的过程如下:
//获取键盘录入对象。

学习~ 毕老师的视频我还没看过,等我把目前的教程看完再看,配合BufferedWritter是可以写入的;
在API中的解释是:
Scanner:一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器;
BufferedWritter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,默认值就足够大了。
该类提供了 newLine() 方法,它使用平台自己的行分隔符概念,此概念由系统属性 line.separator 定义。并非所有平台都使用新行符 ('\n') 来终止各行。因此调用此方法来终止每个输出行要优于直接写入新行符。
通常 Writer 将其输出立即发送到底层字符或字节流。除非要求提示输出,否则建议用 BufferedWriter 包装所有其 write() 操作可能开销很高的 Writer(如 FileWriters 和 OutputStreamWriters)。例如,
PrintWriter out   = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));
将缓冲 PrintWriter 对文件的输出。如果没有缓冲,则每次调用 print() 方法会导致将字符转换为字节,然后立即写入到文件,而这是极其低效的。
InputStream:此抽象类是表示字节输入流的所有类的超类。
需要定义 InputStream 子类的应用程序必须总是提供返回下一个输入字节的方法。

Scanner控制台简单测试用的多,如果是项目里面读写文件还是要用到BufferedWriter,因为BufferedWriter提供了更丰富、高效的操作方法,这个属于IO操作部分的内容。

作者: Huylens    时间: 2015-5-6 15:11
大西洋 发表于 2015-5-6 14:31
学习~ 毕老师的视频我还没看过,等我把目前的教程看完再看,配合BufferedWritter是可以写入的;
在API中的 ...

是自学课程,在这个链接地址:http://www.itheima.com/java/service/javacourse.shtml。

作者: jiao142857    时间: 2015-5-6 16:31
Scanner是jdk1.5之后出现的,
你看一下Scanner的源码
  1.     public Scanner(InputStream source) {
  2.         this(new InputStreamReader(source), WHITESPACE_PATTERN);
  3.     }
复制代码

它也是通过io流实现,然后最常用的参数(System.in)是标准输入输出流.
它比InputStream方法多吧  
个人理解
作者: 张伟1942    时间: 2015-5-6 21:48
个人觉得Scanner
作者: 熊猫宝宝    时间: 2015-5-6 21:51
Scanner sc =new Scanner(System.in);  一个标准输入流
作者: 过路人    时间: 2015-5-6 23:03
当然是后者好,要是有一大片html等你录入,你用鼠标敲,得等到猴年马月才能打完

作者: 肖某    时间: 2015-5-6 23:32
到底哪个好?还不是自己用习惯了就好了,比如说为一个button 设置点击事件的时候,有些人喜欢用匿名内部类的方式,有些人不喜欢。总结  自己喜欢就好  嘻嘻嘻
作者: 横看成岭侧成锋    时间: 2015-5-7 08:38
获取键盘输入用Scanner会好一点吧
作者: 匡璐    时间: 2015-5-7 08:41
用Scanner啊。。。
作者: Super_Nos    时间: 2015-5-7 09:29
个人喜欢Scanner
作者: cjw379551618    时间: 2015-5-7 09:39
都差不多  Scanner方便
作者: bztf    时间: 2015-5-7 13:45
楼上所说的:Scanner是jdk1.5之后出现的。
可见Scanner是比较新的,他封装了多种的键盘输入操作。按照面向对象编程的思想,用Scanner合适。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2