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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hello菜菜 中级黑马   /  2013-10-12 19:18  /  1495 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

当需要提取用户输入的数据时既可以用Scanner类实现,也可以用InputStreamReader转换流,两者有什么区别呢,一般用哪个呢?

评分

参与人数 1黑马币 +5 收起 理由
乔兵 + 5 去26、27板块提问吧

查看全部评分

2 个回复

正序浏览
当需要提取用户输入的数据时既可以用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学徒


评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
先说下我不敢说一般用哪个,因为工作,环境,业务需求的不同使用的频繁度是不同。
1.InputStreamReader,是字节的输入流。一般图片,视频等二进制文件用到,对应的输出流OutputStreamWriter,
我们都知我们的汉字两个字节,两个字节显然用字符流比字节流效率高些。通常用输入输出来操作文件。
2.Scanner是util包下的类,他的不同的 next 方法得到不同类型的值,即基本类型和字符串,可以看出简单的输入还是很方便。操作方面不像流要有异常处理,最后还得关闭流

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

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