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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 根号5 中级黑马   /  2012-4-23 09:23  /  2127 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

键盘上输入的和电脑上显示的不都是字符吗?  为什么看到一些地方都说system.in输入是字节流呢  我看到的一个问题是BufferedReader(InputStreamReader(system.in))   InputStreamReader是接收的字节流,这说明在键盘输入的就是字节流   求解释

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

4 个回复

倒序浏览
你想想啊,键盘只是物理按键,而计算机数据都是二进制的,8位一字节,计算机怎么区分你输入的是什么字母?不还是二进制数据~

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
在IO操作过程中存在字符编码和解码,当你System.in一个字符时,会将该字符对应的默认字符编码集中的值读入到InputStreamReader中,而不是直接将字符读入流

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
System.in就是System类中名字叫“in”的静态属性,它是”InputStream“的一个对象,是系统帮我们做好的。InputStream当然是一个字节流了啊。

你所出现的问题就是对流的包装的问题,字节流通过包装可以得到字符流,反过来也可以。
你要实例化一个BufferedReader,就需要传递一个InputStream的对象,然后要实例化一个

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
首先字符流是字节流的包装类,字符流基于字节流提供了更方便的功能。例如java虚拟机同样调用的是系统底层的工具资源,所以你要关流,把资源还给系统。
然后,InputStreamReader与inputstream如同碗与勺子的关系,我们习惯用把饭用勺子从锅里盛到碗里吃,而不是用勺子直接在锅里吃。
此处,我们用InputStreamReader来盛system.in,从而更方便我们阅读、操作从键盘获得的数据。但底层还是字节流在物理键盘与内存之间传输。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马