当需要提取用户输入的数据时既可以用Scanner类实现,也可以用InputStreamReader转换流,两者有什么区别呢,一般用哪个呢?---
首先要明白Scanner:一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器。
并非什么流(这一点我们可以从:public final class Scanner implements Iterator<String>, Closeable,这段源码中看到)
我们在进行输入的时候调用的是System.in也就是的的系统类中的InputStream的静态常量也叫标准出入流。
而我们在实例化Scanner对象的时候调用的是:
public Scanner(InputStream source) {
this(new InputStreamReader(source), WHITESPACE_PATTERN);
}
这个构造方法
也就是说Scanner的输入需求还是需要以流为基础实现的,但是和字节流不同的是:
字符转换流继承的时Reader,而不是InputStream,这一点是本质上的区别,
说到这里楼主应该明白这基本的一点区别了吧?
说到要用那个的话,我们可以分析,因为InputStream是字节流,而Reader是字符流,他们都继承自Object类,但是我们要了解到字节流和字符流的区别,字符流的本质就是字节流+Unicode码表的封装,
并且:转换流中,其实只是通过传入需要转换的字节流来构造一个StreamEncoder类对象
然后调用此StreamEncoder类对象se来完成write()方法,通过字节流输出,
哎 ,楼主细心体会吧,我将会是26期的Andriod学徒
|