介绍:
在io(五)中讲到使用光使用
System.io进行输入会比较麻烦,所以我们本次介绍BufferedReader和Scanner来对上面的问题进行解决。讲解
一、BufferedReader类
类的定义:
1 | public class BufferedReader |
构造方法:
1 | BufferedReader(Reader in) |
其他方法:
1 | String readLine() |
通过类的继承关系和构造函数,大致弄懂了BufferedReader使用的应该是装饰设计模式,增强了Reader的功能,在这里为什么要写一下readLine这个函数呢,因为这个函数比较好用我们平时使用也比较多。
想使用BufferedReader解决一下System.in的输入问题,那问题来了System.in是InputStream类型,但是BufferedReader接收的是Reader类型,按给怎么处理呢?
其实也很简单,前面我们介绍转换流InputStreamReader起到了作用。
代码:
1 | public static void main(String[] args) { |
结果:
1 | 请输入: |
这样就能够实现系统的输入了,并且还比较好使用,除此之外BufferedReader可以处理File,也比较方便。
但是其实BufferedReader也有一个问题:默认必须是回车换行才算结束!
因为仅仅是回车结束,其实有时候问题也会有些复杂,比如想提取文本中的单词,仅仅使用BufferedReader读取每一行之后还需要对每一行进行处理,使用起来也比较麻烦。所以这就显示出了Scanner的作用了,Scanner对象把回车,空格,tab键都看作输入结束,这样就极大的方便了我们提取信息。
二、Scanner类
Scanner是java.util包中的东西,并不在java.io包当中,但是用它处理输入流,尤其是系统输入时比较方便的
构造方法:
1 | Scanner(InputStream source) |
可以看到构造方法可以接收输入流。
其他方法:
1 | boolean hasNext() |
方法只是列出部分,但是光是看这些方法都感觉很顶,所以这也是为什么Scanner取代BufferedReader进行输入流的读取。
代码:
1 | public static void main(String[] args) { |
结果:
1 | 请输入: |
可以看到也能实现很简单的系统输入,但是除此之外,Scanner还提供了判断是否有int型等功能,使用起来肯定是比BufferedReader顺手的。并且Scanner也可以处理File输入,所以在很多方面的功能上BufferedReader都被Scanner取代了。
总结
总结了一下BufferedReader和Scanner,两者在输入上都有作用,但是一般来说现在使用Scanner进行读取更多一些,因为比较方便,但是BufferedReader好像在IO读取上效率更高,这个暂时没有研究,如果后面有时间,会再进行研究一下。